问题陈述。
用户名应介于6到32个字母数字字符之间。允许空格,除非它是第一个或最后一个字符。不要将两个以上相同的字符放在一起。允许以下特殊字符:@#$。用户名区分大小写
我们现有的正则表达式
(?!.*(.)\1{2})^[^\s]([0-9]*)([A-Za-z]+)(\w|\@|\#|\$|\s|\-)*[^\s]
适用于这些测试用例
eldricdsouza
eldric1dsouza
eldric@dsouza
eldric#dsouza
eldric$dsouza
eldric dsouza
eldric
eldricdsouza1
!eldric123#
eeeldric123#
eellldric123#
!user1405!
user@1405!
user@1405#$
user@1405###
user@1405###$
user@144405##$
user@14405##$
这些不适合......
5634user@14405##$ ---gave an error...when this is valid.
usereldric_ --- underscore is not valid
usereldric-dsouza --- hyphen is not valid.
5634user@14405##$ ---gave an error...when this is valid.
usereldric_ --- underscore is not valid
usereldric-dsouza --- hyphen is not valid.
或者这......
UseerrNaame78
答案 0 :(得分:1)
您可以使用此模式在所有字符串中不超过2个相同的字符:
^(?=[a-zA-Z])(?:([\w@#$-]| (?!$))(?!.*\1.*\1)){6,32}$
但是如果背靠背不超过2个相同的角色,你可以使用:
^(?=[a-zA-Z])(?:([\w@#$-]| (?!$))(?!\1\1)){6,32}$
答案 1 :(得分:0)
符合您要求的正则表达式是:
/^([a-zA-Z@#$])(?!\1)(?:([a-zA-Z@#$ ])(?!\2)){4,30}[a-zA-Z@#$]$/
DEMO:http://regex101.com/r/dS9kE2
一些解释:
(?!\1)
- (或2)预见下一个字符与最后一个字符不同[a-zA-Z@#$]
- 第一个和最后一个位置的已批准字符类[a-zA-Z@#$ ]
- 中间认可的字符类{4,30}
中间部分必须包含(6-2)和(32-2)个字符