错误:模式必须是RegExp

Gau*_*pta 2 regex node.js hapijs joi

我需要接受一个手机号码作为网络服务的输入,但我在使用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)
Run Code Online (Sandbox Code Playgroud)

用于验证:

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
        }
    };
}();
Run Code Online (Sandbox Code Playgroud)

我检查了正则表达式freeformatter,它似乎为atleast一些投入正常工作.我不明白为什么joi会抛出这个错误.

ccj*_*mne 9

实际上,正如这里所记载的那样(链接),Joi框架在这里不是一个正则表达式模式,而是一个真正的正则表达式.即:你应该使用:

Joi.string().required().regex(/^[0-9]*$/) [...]
Run Code Online (Sandbox Code Playgroud)

... 代替:

Joi.string().required().regex('^[0-9]*$') [...]
Run Code Online (Sandbox Code Playgroud)