Arrays 如何使用Sequelize.js和PostgreSQL验证数组字段的数组输入?
我用的是++。我对phone字段有以下模式定义,可以是字符串数组,但只允许使用number: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),
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;
}
}
}