如何使用Sequelize.js和PostgreSQLvalidation数组字段的数组input?

我使用Node.js + PostgreSQL + Sequelize.js 2.0.2 。 我有以下模式定义的电话字段可能是string数组,但只允许数字:

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 } }, .... .... }); 

数字电话号码数组未通过validation。

input[ '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' } ] } 

但是,单值数组input[ '9252522525' ]是成功的。 是Sequelize的bug还是我错了?

[编辑]

我改变了validation器,但没有成功。

 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' } ] } 

根据Sequelize github回购问题 ,所有的validation器都适用于数组,而不是数组中的单个项目,这对于我来说似乎不是最终用户。 解决方法是定义自定义validation器:

 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; } } } 

我认为,因为phonetypes是ARRAY ,而不是STRING
isNumeric不能应用于phone ,我想。