我从谷歌和SO获得了不同类型的电子邮件模式。但我无法理解这种模式。请任何人给我一个解释以下模式。提前谢谢。
"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
"\\@" +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
"(" +
"\\." +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
")+"
答案 0 :(得分:5)
答案 1 :(得分:1)
首先,这个正则表达式是错误的。它会允许很多明显无效的电子邮件地址(比如“a@test.c-”),以及至少有些奇怪的东西(比如“a+b@test.com”)。
至少根据规范,我认为a+b@test.com在技术上是有效的,但完整的规范实际上很少实现,所以这是一个设计决定,你是否想要允许这样的东西。 (请注意,一些主要供应商做允许这样的电子邮件)。
尝试将其分解为组件。完整的Regex字符串如下:
[a-zA-Z0-9\+\.\_\%\-\+]{1,256}\@[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}(\.[a-zA-Z0-9][a-zA-Z0-9\-]{0,25})+
以下字符串:
[a-zA-Z0-9\+\.\_\%\-\+]{1,256}
匹配“@”符号前的字符。
在
{1,256}
部分表示“在1到256次之间匹配进行中的项目。”换句话说,在“@”符号之前至少有一个字符(但不超过256个)。例如,
[a-zA-Z0-9]{1, 50}
表示“介于1到50个字母数字字符之间。”
\ @ 匹配“@”符号。
[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}
在@符号后面和“。”之前至少有一个字母数字字符后跟0 - 64个字母数字字符(或破折号)。 (即在“.com”或其他任何部分之前)。回想一下,{0, 64}
表示“介于0到64之间。”
(\.[a-zA-Z0-9][a-zA-Z0-9\-]{0,25})+
“。”之后的部分。 (例如“.com”)。包括一个句点,后跟1到26个字母数字字符。它还允许 - 在第一个字母数字字符之后。
这里明显的缺陷是破折号出现在哪里(或有多少)的限制很少。例如,以下电子邮件地址均为“有效”:
a+b@test.c--------a
a+b@test.c-
a+.%b@test.c
%@t.c-
答案 2 :(得分:1)
逐个分解:
[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}
- 匹配一个字符串,该字符串可以包含a到z,A到Z,0到9以及字符" +","。",& #34; _","%"," - "。字符串长度可以在1到256个字符之间。 (为什么+符号两次,我不知道)
\\@
- 匹配电子邮件地址中的@符号
[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}
- 匹配@符号后面的第一部分,该符号以aZ,AZ或0-9之一的字符开头,后跟可以包含连字符的字符(' - & #39)。例如。 '堆栈溢出&#39 ;.该字符串长度可以是1到65个字符(包括第一个字符)
\\.
- 匹配。本身(google.com中的。)
[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}
- 匹配与上面类似的字符串,最长可达25个字符
之后的整个部分。包含在()+中,表示可以根据需要重复多次(例如mymachine.mydepartment.mycompany.com)
使用大部分模式的示例是
user%21@my-jobs.my-company.com