在Node.js中使用nameValidator时如何允许名称包含空格?
解决mongoose-validator验证名称时无法包含空格的问题
嘿,我来帮你搞定这个问题!你遇到的情况是因为isAlphanumeric这个验证器默认只认字母和数字,空格不在它的允许列表里,所以像“Jacob David”这种带空格的名字就触发错误了。下面给你两种靠谱的解决方法:
方法1:用自定义正则表达式替代原有验证器
直接写一个自定义的验证逻辑,明确允许字母、数字和空格(如果需要的话,还可以加上连字符、点号这类常用的名称符号):
var validate = require('mongoose-validator'); var nameValidator = [ validate({ validator: 'isLength', arguments: [3, 25], message: 'Name should be between {ARGS[0]} and {ARGS[1]} characters' }), validate({ validator: function(value) { // 正则规则:允许大小写字母、数字和空格,你可以根据需求修改 return /^[a-zA-Z0-9\s]+$/.test(value); }, passIfEmpty: true, message: 'Name should only contain letters, numbers, and spaces' }) ];
方法2:给isAlphanumeric添加允许忽略的字符
如果你更倾向于保留isAlphanumeric这个验证器,可以利用它的扩展参数,告诉它忽略空格(需要你的validator.js版本在v13及以上,低版本的话可能得先升级依赖):
var validate = require('mongoose-validator'); var nameValidator = [ validate({ validator: 'isLength', arguments: [3, 25], message: 'Name should be between {ARGS[0]} and {ARGS[1]} characters' }), validate({ validator: 'isAlphanumeric', // 第一个参数是locale,第二个参数里指定忽略空格 arguments: ['en-US', { ignore: ' ' }], passIfEmpty: true, message: 'Name should only contain letters, numbers, and spaces' }) ];
改完之后,你再测试“Jacob David”这类带空格的名称,应该就能顺利通过验证了,同时那些包含!@#$这类特殊字符的输入还是会被拦截下来,完美符合需求~
内容的提问来源于stack exchange,提问作者Grijan
相关产品推荐
相关产品推荐

