字段验证

优质
小牛编辑
133浏览
2023-12-01

数据库字段约束

模型验证允许你为模型的每个属性指定格式/内容/继承验证. 验证会自动运行在create,updatesave上. 你也可以调用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: '不是邮箱类型'
            }
        }
    },