电子邮件模式的说明

时间:2016-10-21 03:36:11

标签: java android

我从谷歌和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}" +
                  ")+"

3 个答案:

答案 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