Arrays 如何使用Sequelize.js和PostgreSQL验证数组字段的数组输入?

Arrays 如何使用Sequelize.js和PostgreSQL验证数组字段的数组输入?,arrays,node.js,postgresql,validation,sequelize.js,Arrays,Node.js,Postgresql,Validation,Sequelize.js,我用的是++。我对phone字段有以下模式定义,可以是字符串数组,但只允许使用number: var User = sequelize.define("User", { .... .... /** Phone number * Multiple numbers should be registered due to */ phone: { type: Sequelize.ARRAY(Sequelize.STRING),

我用的是++。我对phone字段有以下模式定义,可以是字符串数组,但只允许使用number:

var User = sequelize.define("User", {
    ....
    ....
    /** Phone number
     * Multiple numbers should be registered due to
     */
    phone: {
        type: Sequelize.ARRAY(Sequelize.STRING),
        allowNull: false,
        unique: true,
        validate: {
            isNumeric: true
        }
    },
    ....
    ....
});
数字电话号码数组未通过验证

输入
['9252522525','9252525555']

错误

{ [SequelizeValidationError: Validation error]
  name: 'SequelizeValidationError',
  message: 'Validation error',
  errors: 
   [ { message: 'Validation isNumeric failed',
       type: 'Validation error',
       path: 'phone',
       value: 'Validation isNumeric failed',
       __raw: 'Validation isNumeric failed' } ] }
但是,单值数组输入
['9252522525']
成功。是Sequelize的bug还是我错了

[编辑] 我将验证器更改为
is
,但没有成功

validate: {
    is: ["^[0-9]+$", "i"]
}
我犯了以下错误

{ [SequelizeValidationError: Validation error]
  name: 'SequelizeValidationError',
  message: 'Validation error',
  errors: 
   [ { message: 'Validation is failed',
       type: 'Validation error',
       path: 'phone',
       value: 'Validation is failed',
       __raw: 'Validation is failed' } ] }

我想是因为
手机的类型是
数组
,而不是
字符串


isNumeric
不能应用于
手机
,我想。

我想是因为
手机
的类型是
数组
,而不是
字符串

isNumeric
我认为不能应用于
phone

根据,所有验证器都适用于阵列,而不是作为最终用户我似乎不清楚的阵列的单个项目。解决方法是定义自定义验证器:

phone: {
    type: Sequelize.ARRAY(Sequelize.STRING),
    allowNull: false,
    unique: true,
    validate: {
        isValidPhoneNo: function(value) {
            if (!value) return value;

            var regexp = /^[0-9]+$/;
            var values = (Array.isArray(value)) ? value : [value];

            values.forEach(function(val) {
                if (!regexp.test(val)) {
                    throw new Error("Number only is allowed.");
                }
            });
            return value;
        }
    }
}
根据,所有的验证器都应用于数组,而不是数组中的单个项,作为最终用户,我似乎不清楚这些项。解决方法是定义自定义验证器:

phone: {
    type: Sequelize.ARRAY(Sequelize.STRING),
    allowNull: false,
    unique: true,
    validate: {
        isValidPhoneNo: function(value) {
            if (!value) return value;

            var regexp = /^[0-9]+$/;
            var values = (Array.isArray(value)) ? value : [value];

            values.forEach(function(val) {
                if (!regexp.test(val)) {
                    throw new Error("Number only is allowed.");
                }
            });
            return value;
        }
    }
}