【问题标题】:JS regex to match a username with specific special characters and no consecutive spacesJS 正则表达式匹配具有特定特殊字符且没有连续空格的用户名
【发布时间】:2017-08-18 12:02:18
【问题描述】:

我对这个 reg ex 世界很陌生。完成了关于 Regex 的小任务。 在发布新问题之前,我已经阅读了一些能够理解但无法解决我的问题的答案 感谢您在这方面的帮助。

我的场景是:

根据以下条件验证用户名

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

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

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

4- 最大大小应为 30 个字符

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

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

例如:@test、_test、@test123、123@、test_-@、test -test1、@test -_@test 等...

感谢您对此的帮助..

谢谢 阿琼

【问题讨论】:

    标签: javascript html regex pattern-matching spaces


    【解决方案1】:

    给你:

    ^(?!.*[ ]{2,})[\w@][-@\w]{0,29}$
    

    working on regex101.com.
    条件 3 是模棱两可的,因为无论如何您都不允许使用空格。 \w[a-zA-Z_] 的快捷方式,(?!...) 称为否定。展望。


    分解这个说:
    ^             # start of string
    (?!.*[ ]{2,}) # neg. lookahead, no consecutive spaces
    [\w@]         # condition 1
    [-@\w]{0,29}  # condition 2 and 4
    $             # end of string
    

    【讨论】:

    • 嗨 Jan,感谢您的及时回复。可能 bi 没有正确地提出我的问题...您的解决方案对单个单词完美无缺。但是我的用户名可能包含由单个空格分隔的多个单词。 .对于第一个单词,只允许使用 _@ 字母数字,对于第二个单词,它可以包含 _-@aphanumeric.. 示例 - _test -test、test -_test、test _test123 等
    【解决方案2】:

    这可能有效^(?=.{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
    

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 2021-11-09
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2023-02-14
      • 1970-01-01
      相关资源
      最近更新 更多