JS正则表达式将用户名与特定的特殊字符匹配,没有连续的空格

时间:2017-03-25 15:35:44

标签: javascript html regex pattern-matching spaces

我对这个reg ex世界很新。对Regex的小任务进行了深入研究。 在发布新问题之前,我已经通过了一些能够理解但无法解决问题的解决方案的答案 感谢你的帮助。

我的情景是:

根据以下标准验证用户名

1-第一个字符必须是a-zA-Z0-9_ @(两个特殊字符(_ @)或字母数字之一)

2 - 其余可以是任何字母,任何数字和 - @ _(三个特殊字符和字母数字中的任意一个)。

3 - 但单词之间没有连续的空格。

4-最大尺寸应为30个字符

我的用户名可能包含由单个空格分隔的多个单词。对于第一个单词,只允许_ @ alphanumeric,对于第二个单词,它可以包含_- @ aphanumeric

需要忽略用户名末尾的尾随空格

示例包括:@ test,_test,@ test123,123 @ ,test _- @,test -test1,@ test -_ @ test等......

感谢你对此的帮助..

由于 阿琼

2 个答案:

答案 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