多行电子邮件地址的正则表达式?
我正在寻找RegEx
多行电子邮件地址。 例如:多行电子邮件地址的正则表达式?
1)单电子邮件:
[email protected] - ok
2)两线电子邮件:
[email protected]
[email protected] - ok
3)两线电子邮件:
john [email protected] - not ok
[email protected]
我试着如下:
((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?)+)\r*
但是当我测试了一下,似乎仍然匹配OK如果有1个有效的电子邮件地址作为例子3.
在我需要其中规定所有电子邮件地址必须是有效的规则。
如何:
^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\s?)+)*)$
检查字符串的开头使用 '^' 和结尾用 '$'。 允许一个可选的空格字符'\ s?'。
尝试使用http://myregexp.com/signedJar.html来测试正则表达式。
我的猜测是,你可能需要在你的正则表达式结束时使用多行选项(在大多数情况下,正则表达式后的/m
)。
编辑你也可能要添加锚点\A
和\z
标记输入数据的开始和结束。这里是锚上的good article。
编辑快速和肮脏的例子在Ruby中工作:
/\A\[email protected]\w+\.\w+(\n\[email protected]\w+.\.\w+)*\z/
会产生:
"[email protected]\[email protected]".match(/\A\[email protected]\w+\.\w+(\n\[email protected]\w+\.\w+)*\z/)
=> #<MatchData "[email protected]\[email protected]" 1:"\[email protected]">
"[email protected]\nthebar.pl".match(/\A\[email protected]\w+\.\w+(\n\[email protected]\w+\.\w+)*\z/)
=> nil
"[email protected]".match(/\A\[email protected]\w+\.\w+(\n\[email protected]\w+\.\w+)*\z/)
=> #<MatchData "[email protected]" 1:nil>
"[email protected]".match(/\A\[email protected]\w+\.\w+(\n\[email protected]\w+\.\w+)*\z/)
=> nil
可以改善正则表达式,它应该工作。关键是使用\A
和\z
锚。 /m
修饰符不是必需的。
并对我的回答发表评论 - 我同意理查德的观点,很难编写正则表达式来匹配电子邮件地址([indepth explanation](http://www.regular-expressions.info/email.html)) 。根据语言的不同,将输入数据拆分为新行并单独检查每行可能会更好。 – Sorrow 2011-06-10 09:34:16
试过但没有运气,你能提供一个例子吗? – jaffa 2011-06-10 09:34:35
请参阅编辑。我提供了错误的锚点,我的错。 '^'和'$'匹配行的开始和结束,而我应该使用'\ A'和'\ z'。 – Sorrow 2011-06-10 09:45:16
我想拆分字符串[\r\n]+
,然后测试每个地址individualy。
构建一个rgex以正确(对RFC语法)一个电子邮件地址是非常困难的(大多数实际的正则表达式只会验证语法的一个子集 - 但这对于实际使用来说已经足够了)。因此,最好在空格(和其他可接受的分隔符)上分割,然后隔离验证每个地址。这也可以让你突出显示无效的。 – Richard 2011-06-10 09:31:26