我对这个reg ex世界很新。对Regex的小任务进行了深入研究。 在发布新问题之前,我已经通过了一些能够理解但无法解决问题的解决方案的答案 感谢你的帮助。
我的情景是:
根据以下标准验证用户名
1-第一个字符必须是a-zA-Z0-9_ @(两个特殊字符(_ @)或字母数字之一)
2 - 其余可以是任何字母,任何数字和 - @ _(三个特殊字符和字母数字中的任意一个)。
3 - 但单词之间没有连续的空格。
4-最大尺寸应为30个字符
我的用户名可能包含由单个空格分隔的多个单词。对于第一个单词,只允许_ @ alphanumeric,对于第二个单词,它可以包含_- @ aphanumeric
需要忽略用户名末尾的尾随空格
示例包括:@ test,_test,@ test123,123 @ ,test _- @,test -test1,@ test -_ @ test等......
感谢你对此的帮助..
由于 阿琼
答案 0 :(得分:0)
你走了:
^(?!.*[ ]{2,})[\w@][-@\w]{0,29}$
见working on regex101.com。
条件3是ambigouus,但因为你不允许空间。 \w
是[a-zA-Z_]
的快捷方式,(?!...)
被称为neg。展望。
^ # start of string
(?!.*[ ]{2,}) # neg. lookahead, no consecutive spaces
[\w@] # condition 1
[-@\w]{0,29} # condition 2 and 4
$ # end of string
答案 1 :(得分:0)
这可能有效^(?=.{1,30}$)(?!.*[ ]{2})[a-zA-Z0-9_@]+(?:[ ][a-zA-Z0-9_@-]+)*$
注意 - 没有连续空格(?! .* [ ]{2} )
的检查实际上不是
因为正则表达式主体只允许单词之间有一个空格
它留给后人,如果你想要把它拿出来。
解释
^ # BOS
(?= .{1,30} $ ) # Min 1 character, max 30
(?! .* [ ]{2} ) # No consecutive spaces (not really necessary here)
[a-zA-Z0-9_@]+ # First word only
(?: # Optional other words
[ ]
[a-zA-Z0-9_@-]+
)*
$ # EOS