这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战
验证器属性验证
可以定义自定义验证器, 也可以使用由 validator.js 实现的多个内置验证器
sequelize.define('foo', {
bar: {
type: DataTypes.STRING,
validate: {
is: /^[a-z]+$/i, // 匹配这个 RegExp
is: ["^[a-z]+$",'i'], // 与上面相同,但是以字符串构造 RegExp
not: /^[a-z]+$/i, // 不匹配 RegExp
not: ["^[a-z]+$",'i'], // 与上面相同,但是以字符串构造 RegExp
isEmail: true, // 检查 email 格式 (foo@bar.com)
isUrl: true, // 检查 url 格式 (http://foo.com)
isIP: true, // 检查 IPv4 (129.89.23.1) 或 IPv6 格式
isIPv4: true, // 检查 IPv4 格式 (129.89.23.1)
isIPv6: true, // 检查 IPv6 格式
isAlpha: true, // 只允许字母
isAlphanumeric: true, // 将仅允许使用字母数字,因此 '_abc' 将失败
isNumeric: true, // 只允许数字
isInt: true, // 检查有效的整数
isFloat: true, // 检查有效的浮点数
isDecimal: true, // 检查任何数字
isLowercase: true, // 检查小写
isUppercase: true, // 检查大写
notNull: true, // 不允许为空
isNull: true, // 只允许为空
notEmpty: true, // 不允许空字符串
equals: 'specific value', // 仅允许 'specific value'
contains: 'foo', // 强制特定子字符串
notIn: [['foo', 'bar']], // 检查值不是这些之一
isIn: [['foo', 'bar']], // 检查值是其中之一
notContains: 'bar', // 不允许特定的子字符串
len: [2,10], // 仅允许长度在2到10之间的值
isUUID: 4, // 只允许 uuid
isDate: true, // 只允许日期字符串
isAfter: "2011-11-05", // 仅允许特定日期之后的日期字符串
isBefore: "2011-11-05", // 仅允许特定日期之前的日期字符串
max: 23, // 仅允许值 <= 23
min: 23, // 仅允许值 >= 23
isCreditCard: true, // 检查有效的信用卡号
}
}
});
在需要将多个参数传递给内置验证函数的情况下,要传递的参数必须位于数组中. 但是,如果要传递单个数组参数,例如,isIn 可接受的字符串数组,则将其解释为多个字符串参数,而不是一个数组参数. 要解决此问题,传递一个单长度的参数数组,所示的 [['foo', 'bar']]
要使用自定义错误消息而不是 validator.js 提供的错误消息,使用对象而不是纯值或参数数组,例如验证器 不需要参数就可以给自定义消息
isInt: {
msg: "必须是价格的整数"
}
或者如果还需要传递参数,添加一个 args 属性:
isIn: {
args: [['en', 'zh']],
msg: "必须为英文或中文"
}
使用自定义验证器功能时,错误消息将是抛出的 Error 对象所持有的任何消息, 可以为日志记录部分定义自定义功能, 只需传递一个函数. 第一个参数是记录的字符串.