2017-07-28 98 views
1

我已经写了一个正则表达式:阿尔法正则表达式,连字符,下划线和点字

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

它做工精细十岁上下但它允许---或___或...甚至-_ 。作为输入(至少没有2个alpha)输入,我不想那样。例如,我可以有-aa,a-a,aa ---(对于其他角色也是如此)。

要求是在字符串中应该至少有2个字母,连字符和其他2个非字母符号可以在字符串内的任何位置。

+0

能否请您澄清规则?字符串中至少有2个字母?或者只是不允许没有字母的字符串? –

+0

要清楚 - 你想要至少两个字母字符?然后可能有穿插连字符,下划线,句号和空格的组合? – Shiva

+0

对不起,是的字符串中至少有2个字母。这是一项要求。 –

回答

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次出现允许字符
  • $的 - 的端字符串

请注意,如果它位于s处,则不需要转义-挞/字符类的结束。 _是一个字的字符,不需要在任何地方逃脱它。 .不需要在字符类中转义。

告诉正则表达式引擎在字符串中限制._-字符到最大10,后^锚添加(?!(?:[^._-]*[._-]){11})负前瞻:

/^(?!(?:[^._-]*[._-]){11})(?=(?:[^a-zA-Z]*[a-zA-Z]){2})[-_. a-zA-Z]{2,60}$/ 
+0

我可以添加十个连字符或点或极点的限制吗? –

+0

是的,在'^'之后加'(?!(?:[^ ._-] * [._-]){11})''。 –

+0

甜,它工作。干杯。 –

相关问题