用户名RegEx Swift

hab*_*bed 2 regex username ios nsregularexpression swift

用户名regex应该是至少8个字符长的任何字符串。该字符串中可以有@符号,句点,数字或没有。我在下面放置了一些有效和无效的测试用例。我该如何实现?

有效:

user@user.com 
adminuser1 
user.user@user.com 
Run Code Online (Sandbox Code Playgroud)

无效:

user@user.user.com
1adminuser1 
Run Code Online (Sandbox Code Playgroud)

目前我有:

let usernameRegex = "\\A\\w{6,30}\\z"
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您似乎过度限制了用户名中使用的电子邮件。一个基本的电子邮件模式是\S+@\S+\.\S+匹配电子邮件之类的东西,但是您似乎不想让用户名以数字开头,并且域部分不能包含2个点。

根据这些假设,有一种方法可以将“模式”固定为

"^(?=\\S{8})[a-zA-Z]\\w*(?:\\.\\w+)*(?:@\\w+\\.\\w{2,4})?$"
Run Code Online (Sandbox Code Playgroud)

参见regex演示。这里,

  • ^ -字符串开始
  • (?=\\S{8}) -字符串开始后,字符串应至少包含8个非whitepsace字符
  • [a-zA-Z] -ASCII字母
  • \\w* -1个以上的字符
  • (?:\\.\\w+)*-0+序列,.后跟1+字字符
  • (?:@\\w+\\.\\w{2,4})? -可选的顺序:
    • @-一个@符号
    • \\w+ -1个以上的字符
    • \\. -一个点
    • \\w{2,4} -2、3或4个字元的字元
  • $ -字符串结尾。

一个非常通用的正则表达式允许的字符不仅仅是字母/数字或下划线"^(?=\\S{8})(?!\\S*@\\S*\\.\\S*\\.)[a-zA-Z]\\S*(?:@\\S+\\.\\S+)?$"。它与上面的用法\S(任何非空白char)不同,只是使用了一个负向的超前行为(?!\\S*@\\S*\\.\\S*\\.),如果后面有2个点,则匹配失败@。

  • 优秀的答案! (2认同)
  • 感谢您链接https://regex101.com/网站。这对我帮助很大 :) (2认同)