帮助正则表达式 - 电子邮件地址匹配

时间:2010-08-26 09:34:30

标签: regex flex actionscript-3 actionscript

我有以下正则表达式,假设匹配电子邮件地址:

[a-z0-9!#$%&'*+\\-/=?^_`{|}~][a-z0-9!#$%&'*+\\-/=?^_`{|}~.]{0,63}@[a-z0-9][a-z0-9\\-]*[a-z0-9](\\.[a-z0-9][a-z0-9\\-]*[a-z0-9])+$.

我在AS3中有以下代码:

var mails:Array = str.toLowerCase().match(pattern);

(模式是带有上述正则表达式的RegExp。)

strgaga@example.com时,我会检索到两个结果:

  1. gaga@example.com
  2. .com
  3. 为什么?

5 个答案:

答案 0 :(得分:3)

.com被正则表达式(\\.[a-z0-9][a-z0-9\\-]*[a-z0-9])的最后一部分捕获。

正则表达式capture substrings()中包含的模式部分相匹配,以供日后使用。

例如,正则表达式0x([0-9a-fA-F])将匹配形式为0x9F34的十六进制数,并在单独的组中捕获十六进制部分。

答案 1 :(得分:1)

我不确定你的正则表达式,有一个关于电子邮件验证的好教程here

对我来说,这是:

[a-z0-9!#$%&'*+\-/=?^_{|}~]           # single of chosen character set
[a-z0-9!#$%&'*+\\-/=?^_{|}~.]{0,63}   # any of chosen character set with the addition of , \
@
[a-z0-9]                              # single alpha numeric
[a-z0-9\-]*                           # any alphanumeric with the addition of -
a-z                                   # single alphabetical
0-9+                                  # at least one number
$                                     # end of line
.                                     # any character

至于为什么你在数组中得到两个子字符串,因为它们都符合模式 - see docs

答案 2 :(得分:1)

gaga@example.com是整个正则表达式的匹配,.com是第一个组的最后一个匹配((\\.[a-z0-9][a-z0-9\\-]*[a-z0-9]))。

答案 3 :(得分:0)

([a-z0-9!#$%&'*+\\-/=?^_`{|}~][a-z0-9!#$%&'*+\\-/=?^_`{|}~.]{0,63}@[a-z0-9\\-]*[a-z0-9]+\\.([a-z0-9\\-]*[a-z0-9]))+$

这似乎按预期工作(在Regex Tester中测试)。删除了最后一个捕获组。

答案 4 :(得分:0)

添加其他人所说的话:

有两个结果,因为它匹配整个电子邮件地址,以及括号括起来的最后一组。

如果您不想捕获群组,可以将?:添加到群组的开头。查看AS文档中的非捕获组:

http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=00000118.html#wp129703

“非捕获组是仅用于分组的组;它不是”收集的“,并且它与编号的反向引用不匹配。使用(?:和)来定义非捕获组,如下所示:

var pattern = /(?:com|org|net)/;