多个连续空间的模式验证器

时间:2018-10-04 19:39:05

标签: regex angular typescript angular6

我的目标是创建一个角度Validator来禁止连续的空格;

当前我正在使用Validators.pattern('^[a-zA-Z0-9]+( [a-zA-Z0-9]+)*$'),该问题已解决。唯一的问题是,它也不允许使用我不想要的特殊字符。

  • text text无效,因为有多个连续的空格
  • 如果空格位于字符串的开头或结尾,验证器也应该起作用
  • 尽管text α是一个特殊字符,但
  • α不应引发错误事件

2 个答案:

答案 0 :(得分:1)

您可以使用

Validators.pattern('\\s*\\S+(?: \\S+)*\\s*') // if at there can be 0 or more leading/trailing whitespaces
Validators.pattern('\\s?\\S+(?: \\S+)*\\s?') // if at there can be 1 or 0 leading/trailing whitespaces

或者,正则表达式文字等效项:

Validators.pattern(/^\s*\S+(?: \S+)*\s*$/) // if at there can be 0 or more leading/trailing whitespaces
Validators.pattern(/^\s?\S+(?: \S+)*\s?$/) // if at there can be 1 or 0  leading/trailing whitespaces

它将被解析为

  • ^-字符串的开头(隐含字符串模式,它会自动添加)
  • \s*-超过0个空格
  • \S+-1个以上非空格字符
  • (?: \S+)*-一个空格的0个或多个重复,后跟1+个非空白字符
  • \s*-超过0个空格
  • $-字符串结尾(隐含字符串模式,它会自动添加)。

如果在非空白块之间允许任何空白,请在模式中用\s(或\\s)替换文字空间。

答案 1 :(得分:0)

您可以使用\s*([^\s]+\s?)*\s*作为图案。

这是:0个或多个空格,后跟零个或多个(一个或多个非空格字符,然后最多一个空格),然后是0个或多个空格。

请参阅:https://stackblitz.com/edit/angular-m1cgzk