ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ### 数据库字段约束 模型验证允许你为模型的每个属性指定格式/内容/继承验证. 验证会自动运行在`create`,`update`和`save`上. 你也可以调用`validate()`手动验证一个实例. ~~~ class ValidateMe extends Model {} ValidateMe.init({ bar: { type: Sequelize.STRING, validate: { is: ["^[a-z]+$",'i'], // 只允许字母 is: /^[a-z]+$/i, // 与上一个示例相同,使用了真正的正则表达式 not: ["[a-z]",'i'], // 不允许字母 isEmail: true, // 检查邮件格式 (foo@bar.com) isUrl: true, // 检查连接格式 (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, // 只允许使用字母数字 isNumeric: true, // 只允许数字 isInt: true, // 检查是否为有效整数 isFloat: true, // 检查是否为有效浮点数 isDecimal: true, // 检查是否为任意数字 isLowercase: true, // 检查是否为小写 isUppercase: true, // 检查是否为大写 notNull: true, // 不允许为空 isNull: true, // 只允许为空 notEmpty: true, // 不允许空字符串 equals: 'specific value', // 只允许一个特定值 contains: 'foo', // 检查是否包含特定的子字符串 notIn: [['foo', 'bar']], // 检查是否值不是其中之一 isIn: [['foo', 'bar']], // 检查是否值是其中之一 notContains: 'bar', // 不允许包含特定的子字符串 len: [2,10], // 只允许长度在2到10之间的值 isUUID: 4, // 只允许uuids isDate: true, // 只允许日期字符串 isAfter: "2011-11-05", // 只允许在特定日期之后的日期字符串 isBefore: "2011-11-05", // 只允许在特定日期之前的日期字符串 max: 23, // 只允许值 <= 23 min: 23, // 只允许值 >= 23 isCreditCard: true, // 检查有效的信用卡号码 // 自定义验证器的示例: isEven(value) { if (parseInt(value) % 2 !== 0) { throw new Error('Only even values are allowed!'); } } isGreaterThanOtherField(value) { if (parseInt(value) <= parseInt(this.otherField)) { throw new Error('Bar must be greater than otherField.'); } } } } }, { sequelize }); ~~~ ~~~ const Student = app.model.define('student',{ id: { type: INTEGER, primaryKey: true, autoIncrement: true }, name: { type: STRING, allowNull: false }, age: { type: INTEGER, allowNull: false, validate: { isEmail: { args: true, msg: '不是邮箱类型' } } }, ~~~