我正在寻找满足以下条件的正则表达式
- 最小 1 和最大 50 个字符
- 字符串开头和结尾没有空格
- 只允许一个空格,在 2 个单词之间加点。
我正在使用下面的表达式,这会导致灾难性的回溯问题。表达-
/^[a-zA-Z]+(?:(?:|['_. ])([a-zA-Z]*(.s)?[a-zA-Z])+)*$/
如何防止此问题?
您可以使用
/^(?=.{1,50}$)[a-z]+(?:['_.s][a-z]+)*$/i
请参阅正则表达式演示。
详
-
^
- 字符串的开头 -
(?=.{1,50}$)
- 字符串中必须有 1 到 50 个字符 -
[a-z]+
- 1 个或多个 ASCII 字母 -
(?:['_.s][a-z]+)*
- 0 个或多个序列-
['_.s]
-'
、_
、.
或空格 -
[a-z]+
- 1 个或多个 ASCII 字母
-
-
$
- 字符串结尾 -
/i
- 不区分大小写的修饰符。