正则表达式 - 防止重复的字符

时间:2012-10-15 18:12:06

标签: php regex validation username

我花了几个小时试图解决这个问题。

这是我的正则表达式字符串:
 ^(?=.{4})(?!.{32})[a-zA-Z0-9_]+((\.(-\.)*-?|-(\.-)*\.?) [a-zA-Z0-9_]+)*$ -
您可以对其进行测试here

以下是我尝试编写的内容(用户名验证):

  1. 字符串长度范围 - >行
  2. 字母,数字,_ - 。允许( - 和。在用户名的开头和结尾处不允许) - >行
  3. 需要防止重复的字符(超过5个字符) - > 需要帮助!

2 个答案:

答案 0 :(得分:3)

此:

^(?=.{4})(?!.{32})(?!.*(.)\1{4})\w[\w.-]+\w$

使用另一个(负面的)先行来处理第三个条件。这个将确保没有角色,然后自己4次。

我还使用代表\w的{​​{1}}简化了您的角色类。此外,正如F.J指出的那样,您可以将前两个前瞻组合成一个:

[a-zA-Z0-9]

答案 1 :(得分:0)

尝试以下方法:

^(?=.{4,31}$)(?![-.])(?:(?!(.)\1{4})[-.\w])+(?<![-.])$

示例:http://regexr.com?32ffq

这假设您实际上意味着阻止重复的字符,而不是许可。