当前位置: 首页 > 知识库问答 >
问题:

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

双志强
2023-03-14

我对这个reg ex世界很陌生。与关于正则表达式的小任务有关。在发布新问题之前,我已经浏览了一些能够理解但无法破解问题解决方案的答案。感谢您对此的帮助。

我的设想是:

基于以下条件验证用户名

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

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

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

4-最大长度应为30个字符

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

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

例如:@test、_test、@test123、123@、test_-@、测试-test1、@test-_@test等。

感谢您对此的帮助..

谢谢你,阿琼

共有2个答案

公西运良
2023-03-14

这可能有效^(? =.{ 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
澹台锐
2023-03-14

给你:

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

查看它在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
 类似资料:
  • 本文向大家介绍正则表达式匹配各种特殊字符,包括了正则表达式匹配各种特殊字符的使用技巧和注意事项,需要的朋友参考一下 写个可以匹配一下各种特殊字符的正则表达式 这个匹配所有键盘上可见的非字母和数字的符号 这个是输入框防止特殊字符勿输入验证,包括键盘上所有特殊字符的英文和中文状态。需要者可以根据自身需求而定!谢谢! [^\w\s]+ 匹配非空 非字母 非数字 即可 1 数字:^[0-9]*$ 2 n位

  • 我有一个类似这样的字符串: 但是我得到了一个 你知道我做错了什么吗?

  • 问题内容: 我想搭配以下 com.my.company。 moduleA .MyClassName com.my.company。 moduleB .MyClassName com.my.company。 anythingElse .MyClassName 但 不是 以下 com.my.company。 核心 .MyClassName 我当前的简单正则表达式模式是: 因此,基本上,我该如何匹配其他

  • 我有一些xml文件,希望删除除特定字符串以外的所有内容。 StackOverflow上还有很多类似的问题,但都不适用于我的文件,在尝试了几个小时不同的正则表达式后,我想寻求帮助。 到目前为止,部分成功但并非完全成功的最接近的正则表达式是: xml文件的示例: 我使用regex101,因此可以将示例粘贴在那里,以了解为什么rex只能部分工作。简而言之,它与第一次出现的不匹配,但与第二次出现的匹配。我

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自

  • 我有一个HashMap,里面有键和值。我想用字符串中映射的值替换键。 在字符串中,键被写成@keyname或@“keyname”,这些应替换为map.get(“keyname”) 假设我们的地图是这个 所以如果我们处理字符串“Hello world,Iam@key1 years old.”,它将变成“Hello world,Iam 2 years old.”。 我们可以用@“key1”代替@key