如果字符串包含“”(空格),如何使Joi regex()验证失败?

时间:2018-11-20 11:47:35

标签: javascript node.js joi

我有一个Joi在Node.js中验证的车辆登记号,需要它拒绝任何包含空格(空格,制表符等)的字符串

我尝试了以下模式,但Joi确实通过了:

  const schema = { 
    regNo: Joi.string()
     .regex(/^.*\S*.*$/)
     .required()
     .trim()
    }

因此,如果我提交“ JOI 777”,则该字符串被视为有效。

我在做什么错? 预先感谢

2 个答案:

答案 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