用户名正则表达式 Swift

Username RegEx Swift

用户名正则表达式应该是至少 8 个字符长的任何字符串。此字符串中可以有@符号、句点、数字或没有。我在下面放了一些有效和无效的测试用例。我怎样才能做到这一点?

有效:

user@user.com 
adminuser1 
user.user@user.com 

无效:

user@user.user.com
1adminuser1 

目前我有:

let usernameRegex = "\A\w{6,30}\z"

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

根据这些假设,有一种方法可以 "fix" 您的模式作为

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

参见 the regex demo。在这里,

  • ^ - 字符串开头
  • (?=\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 个单词字符
  • $ - 字符串结尾。

一个非常通用的正则表达式允许更多的字符而不仅仅是 letters/digits 或下划线将是 "^(?=\S{8})(?!\S*@\S*\.\S*\.)[a-zA-Z]\S*(?:@\S+\.\S+)?$"。它与上面 \S (任何非空白字符)的用法不同,并且只使用否定前瞻 (?!\S*@\S*\.\S*\.) 如果在 @ 之后的任何地方有 2 个点,则匹配失败。 =31=]

此表达式验证第一个字母类型的用户名,然后它可能有也可能没有数字,然后它可能有也可能没有 '.' 类型的字符。或 '_' 然后你可以有字母或数字

[a-z]+[0-9]*[_.-]?[a-z0-9]