2010-08-26 116 views
0

我有以下的正则表达式该假设相匹配的电子邮件地址:帮助与正则表达式 - 电子邮件地址匹配

[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); 

(模式是正则表达式与提到正则表达式)。

我找回两个结果,当str[email protected]

  1. [email protected]
  2. .com

为什么?

回答

3

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

正则表达式capture substrings由括在()供以后使用该图案的部分相匹配。

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

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

+0

现在我的答案看起来有点愚蠢如问题正则表达式已更改...这是诚实之前的事情! :) – 2010-08-26 11:02:11

1

[email protected]是整个正则表达式匹配.com是第一组的最后一场比赛((\\.[a-z0-9][a-z0-9\\-]*[a-z0-9]))。

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

这似乎工作正常(在Regex测试仪中测试)。上次捕获组已被删除。

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)/;

相关问题