带有字母,连字符,下划线和点字符的正则表达式

时间:2017-07-28 10:17:18

标签: regex

我写了一个正则表达式:

/^[a-zA-Z\-\_\. ]{2,60}$/

它确实工作正常但它允许---或___或......或甚至-_。输入作为输入(至少没有2 alpha),我不想要那样。例如,我可以有-aa,a-a,aa ---(类似于其他角色)。

要求是字符串中至少应有2个alpha,并且提到的连字符和其他2个非alpha符号可以是字符串中的任何位置。

1 个答案:

答案 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}$/