3

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

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

我正在使用以下表达式,这会导致灾难性的回溯问题。表达 -

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

我怎样才能防止这个问题?

4

1 回答 1

8

您可以使用

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

请参阅正则表达式演示

细节

  • ^- 字符串的开始
  • (?=.{1,50}$)- 字符串中必须有 1 到 50 个字符
  • [a-z]+- 1 个或多个 ASCII 字母
  • (?:['_.\s][a-z]+)*- 0个或多个序列
    • ['_.\s]- a ', _,.或空格
    • [a-z]+- 1 个或多个 ASCII 字母
  • $- 字符串结束
  • /i- 不区分大小写的修饰符。
于 2017-10-10T10:59:19.170 回答