我需要接受一个手机号码作为网络服务的输入,但我在使用Joi框架进行验证时遇到了以下问题。
Joi说:
Error: pattern must be a RegExp
at Object.exports.assert (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/node_modules/joi/node_modules/hoek/lib/index.js:524:11)
at internals.String.regex (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/node_modules/joi/lib/string.js:107:10)
at /home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/src/validators/userValidator.js:10:40
at Object.<anonymous> (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/src/validators/userValidator.js:13:2)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
用于验证:
var userProfileValidation = function(){
return {
payload : {
uid: Joi.string().required().alphanum().length(userConfigs.UID_LENGTH),
mobile_num: Joi.string().required().regex('^[0-9]*$').length(userConfigs.RMN_LENGTH) //for this guy
}
};
}();
我检查了freeformatter上的正则表达式,它似乎适用于至少一些输入。我不明白为什么joi会抛出这个错误。
答案 0 :(得分:7)
实际上,正如文档here (link)所述 Joi框架这里不是正则表达式,而是实际正则表达式。即:你应该使用:
Joi.string().required().regex(/^[0-9]*$/) [...]
...而不是:
Joi.string().required().regex('^[0-9]*$') [...]