我有以下条件,我试图满足一个正则表达式(用户名验证):
- 长度必须介于6到30个字符之间。
- 它不能有两个连续的句点、连字符、下划线或@符号。
- 它必须以字母或数字开始和结束。
我有以下的工作似乎为前两个条件。第三天我会加什么?
^(?=.{6,30}$)(?![.@-])(?!.*[_.@-]{2})^[a-zA-Z0-9._@-]{2,}[a-zA-Z0-9]$
有效字符串示例:
[email protected]
1test-user
[email protected]
123456
asdfghjklpoiuytrewqasdfghjklpo
derghg$56
无效:
[email protected]
[email protected]!
test..user
test_.
2条答案
按热度按时间j5fpnvbx1#
您可以进行负匹配,查找无效模式。这使得它很容易只是合并与
|
任何你想要的。我唯一不明白的问题是
它不能有两个连续的句点、连字符、下划线或@符号。
不管是同一个符号还是列表中的任何一个
无论如何,我希望你能理解:
oogrdqng2#
1.研究你的正则表达式,你似乎有第四个条件:仅允许的字符是字母数字、连字符、下划线或@符号。
1.所以,你为什么不把开头和结尾结合起来呢?首先进行重复的先行检查
(?!.*[_.@-]{2})
,然后识别出两端都有字符串的6-30字符串与夹在字符串[A-Z0-9][\w.@-]{4,28}[A-Z0-9]
之间的4-28字符串相同。把它们放在一起:^(?!.*[_.@-]{2})[A-Z0-9][\w.@-]{4,28}[A-Z0-9]$
如果Assert了不区分大小写的标志(i),这不就解决了吗?
编辑
如果字符串内部允许所有字符(如下面注解中所解释的),则只需将
[\w.@-]
替换为简单的.
。你得到这个: