fastest-validator 包:如何拥有多个模式和消息
fastest-validator package: How to have multiple pattern and message
我使用 fastest-validator 进行验证。
我希望密码字段至少包含一个字符和一个数字。
我需要一条消息来验证至少一个字符和一条消息来验证一个数字。
这是我的代码:
const Validator = require("fastest-validator");
const v = new Validator();
const registerSchema = {
email: { type: "email"},
pass: { type: "string",pattern:'/.*[0-9].*/', min: 8, max: 20 },
};
//also I need a pattern to check at least one char is used and its message specific for it.
exports.validateRegister = v.compile(registerSchema);
可以使用自定义验证器来完成,请参阅 Custom validation for built-in rules:
const Validator = require("fastest-validator");
const v = new Validator({
useNewCustomCheckerFunction: true, // using new version
messages: {
// Register our new error message text
atLeastOneLetter: "The pass value must contain at least one letter from a-z and A-Z ranges!",
atLeastOneDigit: "The pass value must contain at least one digit from 0 to 9!"
}
});
const schema = {
email: {type:"email"},
pass: {
type: "string",
custom: (v, errors) => {
if (!/[0-9]/.test(v)) errors.push({ type: "atLeastOneDigit" });
if (!/[a-zA-Z]/.test(v)) errors.push({ type: "atLeastOneLetter" });
return v;
},
min:8,
max:20,
messages: {
stringPattern: "pass value must contain a digit",
stringMin: "Your pass value is too short",
stringMax: "Your pass value is too large",
}
}
}
const check = v.compile(schema);
console.log( check( {email:"abc@def.com", pass: "JohnABCD"} ));
console.log( check( {email:"abc@def.com", pass: "123456789"} ));
console.log( check( {email:"abc@def.com", pass: "12A"} ));
console.log( check( {email:"abc@def.com", pass: "12A12A12A12A12A12A12A12A12A12A"} ));
node fv.js
的输出(这是我用上面的代码命名文件的方式):
# node fv.js
[ { message:
'The pass value must contain at least one digit from 0 to 9!',
field: 'pass',
type: 'atLeastOneDigit' } ]
[ { message:
'The pass value must contain at least one letter from a-z and A-Z ranges!',
field: 'pass',
type: 'atLeastOneLetter' } ]
[ { type: 'stringMin',
message: 'Your pass value is too short',
field: 'pass',
expected: 8,
actual: 3 } ]
[ { type: 'stringMax',
message: 'Your pass value is too large',
field: 'pass',
expected: 20,
actual: 30 } ]
我使用 fastest-validator 进行验证。 我希望密码字段至少包含一个字符和一个数字。 我需要一条消息来验证至少一个字符和一条消息来验证一个数字。 这是我的代码:
const Validator = require("fastest-validator");
const v = new Validator();
const registerSchema = {
email: { type: "email"},
pass: { type: "string",pattern:'/.*[0-9].*/', min: 8, max: 20 },
};
//also I need a pattern to check at least one char is used and its message specific for it.
exports.validateRegister = v.compile(registerSchema);
可以使用自定义验证器来完成,请参阅 Custom validation for built-in rules:
const Validator = require("fastest-validator");
const v = new Validator({
useNewCustomCheckerFunction: true, // using new version
messages: {
// Register our new error message text
atLeastOneLetter: "The pass value must contain at least one letter from a-z and A-Z ranges!",
atLeastOneDigit: "The pass value must contain at least one digit from 0 to 9!"
}
});
const schema = {
email: {type:"email"},
pass: {
type: "string",
custom: (v, errors) => {
if (!/[0-9]/.test(v)) errors.push({ type: "atLeastOneDigit" });
if (!/[a-zA-Z]/.test(v)) errors.push({ type: "atLeastOneLetter" });
return v;
},
min:8,
max:20,
messages: {
stringPattern: "pass value must contain a digit",
stringMin: "Your pass value is too short",
stringMax: "Your pass value is too large",
}
}
}
const check = v.compile(schema);
console.log( check( {email:"abc@def.com", pass: "JohnABCD"} ));
console.log( check( {email:"abc@def.com", pass: "123456789"} ));
console.log( check( {email:"abc@def.com", pass: "12A"} ));
console.log( check( {email:"abc@def.com", pass: "12A12A12A12A12A12A12A12A12A12A"} ));
node fv.js
的输出(这是我用上面的代码命名文件的方式):
# node fv.js
[ { message:
'The pass value must contain at least one digit from 0 to 9!',
field: 'pass',
type: 'atLeastOneDigit' } ]
[ { message:
'The pass value must contain at least one letter from a-z and A-Z ranges!',
field: 'pass',
type: 'atLeastOneLetter' } ]
[ { type: 'stringMin',
message: 'Your pass value is too short',
field: 'pass',
expected: 8,
actual: 3 } ]
[ { type: 'stringMax',
message: 'Your pass value is too large',
field: 'pass',
expected: 20,
actual: 30 } ]