名字

时间:2017-10-10 10:11:37

标签: javascript regex formvalidation.io

我正在寻找满足以下条件的正则表达式

  • 最小1和最多50个字符
  • 字符串
  • 的开头和结尾没有空格
  • 只允许一个空格,两个单词之间的点。

我使用下面的表达式导致灾难性的回溯问题。 表达 -

/^[a-zA-Z]+(?:(?:|['_\. ])([a-zA-Z]*(\.\s)?[a-zA-Z])+)*$/

如何防止此问题?

1 个答案:

答案 0 :(得分:3)

您可以使用

/^(?=.{1,50}$)[a-z]+(?:['_.\s][a-z]+)*$/i

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • (?=.{1,50}$) - 字符串中必须有1到50个字符
  • [a-z]+ - 一个或多个ASCII字母
  • (?:['_.\s][a-z]+)* - 0或更多序列
    • ['_.\s] - '_.或空白
    • [a-z]+ - 一个或多个ASCII字母
  • $ - 字符串结尾
  • /i - 不区分大小写的修饰符。