帮助与正则表达式 - 电子邮件地址匹配
问题描述:
我有以下的正则表达式该假设相匹配的电子邮件地址:帮助与正则表达式 - 电子邮件地址匹配
[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]
:
[email protected]
.com
为什么?
答
.com
由正则表达式(\\.[a-z0-9][a-z0-9\\-]*[a-z0-9])
的最后一部分抓获。
正则表达式capture substrings由括在()
供以后使用该图案的部分相匹配。
例如,正则表达式0x([0-9a-fA-F])
将匹配形式0x9F34的一个十六进制数并在单独的组捕获六角部分。
答
我不知道你的正则表达式,有关于电子邮件验证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
答
([a-z0-9!#$%&'*+\\-/=?^_`{|}~][a-z0-9!#$%&'*+\\-/=?^_`{|}~.]{0,63}@[a-z0-9\\-]*[a-z0-9]+\\.([a-z0-9\\-]*[a-z0-9]))+$
这似乎工作正常(在Regex测试仪中测试)。上次捕获组已被删除。
答
要添加到其他人所说:
有两种结果,因为它无论是整个电子邮件地址,并用括号括起最后一组比赛。
如果你不想一组,做被捕获您可以添加?:
到组的开始。看的AS文档中的非捕获组:
“一个非捕获型分组是一个仅用于分组;它不是‘收集’,并且它不匹配编号的反向引用使用(。 ?:和)来定义非捕获组,如下所示:
var pattern = /(?:com|org|net)/;
“
现在我的答案看起来有点愚蠢如问题正则表达式已更改...这是诚实之前的事情! :) – 2010-08-26 11:02:11