我有一个Joi在Node.js中验证的车辆登记号,需要它拒绝任何包含空格(空格,制表符等)的字符串
我尝试了以下模式,但Joi确实通过了:
const schema = {
regNo: Joi.string()
.regex(/^.*\S*.*$/)
.required()
.trim()
}
因此,如果我提交“ JOI 777”,则该字符串被视为有效。
我在做什么错? 预先感谢
答案 0 :(得分:1)
您的正则表达式的这一部分-> /^.*
表示要匹配任何内容,因此其余regEx几乎都是短路的。
所以您的RegEx更加简单/^\S+$/
这就是说,从头到尾,所有内容都必须为None空格。也被视为检查所有空格,您也可以取出.trim()
。.
例如
const tests = [
"JOI 777", //space in the middle
"JOI777", //looks good to me
" JOI777", //space at start
"JOI777 ", //space at end
"JO\tI77", //tab
"ABC123", //another one that seems ok.
"XYZ\n111" //newline
];
tests.forEach(t => {
console.log(`${!!t.match(/^\S+$/)} "${t}"`);
});
答案 1 :(得分:0)
要从字符串中跳过空格,只需使用:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
如果您有一个以上的空格,请使用此:
"hello world".replace(/\s/g, "");
有关更多详细信息,请参见下面的链接: Remove whitespaces inside a string in javascript