3

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

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

这是我试图完成的(用户名验证):

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

2 回答 2

3

这:

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

使用另一个(负)前瞻来处理第三个条件。这将确保没有字符,即其自身后跟 4 次。

\w我还通过使用which代表简化了您的字符类[a-zA-Z0-9]。此外,正如 FJ 指出的那样,您可以将前两个前瞻合并为一个:

^(?=.{4,31}$)(?!.*(.)\1{4})\w[\w.-]+\w$
于 2012-10-15T18:19:04.127 回答
0

尝试以下操作:

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

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

这假设您实际上是要防止重复字符,而不是允许。

于 2012-10-15T18:18:39.327 回答