PCRE正则表达式不连续重复

时间:2017-04-14 20:32:26

标签: php regex pcre username

我想要最少6个字符,总共最多15个字符。首先必须是字母数字(没有特殊),下一个(最多)13是字母数字,并且可以包括非连续性(并且一次只有以下一个)下划线OR时段或连字符,然后最后一个字符必须是字母数字。< / p>

好的例子:A_3.hj_3J

示例不行:F__3d66.K

示例不行:6-_sd.6h9

这就是我到目前为止所拥有的,我觉得它很接近而且很烦人。 我做错了什么?

^[a-zA-Z0-9]{1}([_.-]?[a-zA-Z0-9])\S{4,13}[a-zA-Z0-9]{1}$

1 个答案:

答案 0 :(得分:2)

有几个问题:

  1. 您的正则表达式模式也会匹配超过15个字符的输入。
  2. 由于使用了@
  3. ,您的正则表达式还会包含#\S等中间其他不允许的字符

    您可以使用否定前瞻来禁止连续出现句点/连字符/下划线并从正则表达式中间删除\S以允许任何非空格字符

    ^[a-zA-Z0-9](?!.*[_.-]{2})[\w.-]{4,13}[a-zA-Z0-9]$
    

    RegEx Demo