我写了一个正则表达式:
/^[a-zA-Z\-\_\. ]{2,60}$/
它确实工作正常但它允许---或___或......或甚至-_。输入作为输入(至少没有2 alpha),我不想要那样。例如,我可以有-aa,a-a,aa ---(类似于其他角色)。
要求是字符串中至少应有2个alpha,并且提到的连字符和其他2个非alpha符号可以是字符串中的任何位置。
答案 0 :(得分:1)
使用
/^(?=(?:[^a-zA-Z]*[a-zA-Z]){2})[-_. a-zA-Z]{2,60}$/
请参阅regex demo
<强>详情:
^
- 字符串开头(?=(?:[^a-zA-Z]*[a-zA-Z]){2})
- 字符串中至少有2个字母字符(也就是说,必须连续出现2次:
[^a-zA-Z]*
- 除ASCII字母以外的零个或多个字符[a-zA-Z]
- ASCII字母)[-_. a-zA-Z]{2,60}
- 允许的字符数为2到60次$
- 字符串结尾请注意,如果它位于字符类的开头/结尾,则无需转义-
。 _
是一个单词char,无需在任何地方转义它。 .
不需要在字符类中转义。
要告诉正则表达式引擎将.
,_
和-
字符限制为字符串中的最大值10,请在(?!(?:[^._-]*[._-]){11})
锚点后添加^
否定前瞻:
/^(?!(?:[^._-]*[._-]){11})(?=(?:[^a-zA-Z]*[a-zA-Z]){2})[-_. a-zA-Z]{2,60}$/