2011-06-10 99 views
4

我正在寻找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.

在我需要其中规定所有电子邮件地址必须是有效的规则。

+1

构建一个rgex以正确(对RFC语法)一个电子邮件地址是非常困难的(大多数实际的正则表达式只会验证语法的一个子集 - 但这对于实际使用来说已经足够了)。因此,最好在空格(和其他可接受的分隔符)上分割,然后隔离验证每个地址。这也可以让你突出显示无效的。 – Richard 2011-06-10 09:31:26

回答

3

如何:

^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\s?)+)*)$ 

检查字符串的开头使用 '^' 和结尾用 '$'。 允许一个可选的空格字符'\ s?'。

尝试使用http://myregexp.com/signedJar.html来测试正则表达式。

+0

做了一些快速的初步测试,似乎做了工作 - poyfect! – jaffa 2011-06-10 09:46:36

+0

很酷。我只检查一个空白字符。地址之间可能有更多。如果你这样做,改变'\ s?'到'\ s *'。 – Mullins 2011-06-10 09:54:53

+0

无论如何,这只能接受换行符而不只是whitesapce,否则电子邮件可以输入在同一行? – jaffa 2011-06-10 10:02:14

0

我的猜测是,你可能需要在你的正则表达式结束时使用多行选项(在大多数情况下,正则表达式后的/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修饰符不是必需的。

+0

并对我的回答发表评论 - 我同意理查德的观点,很难编写正则表达式来匹配电子邮件地址([indepth explanation](http://www.regular-expressions.info/email.html)) 。根据语言的不同,将输入数据拆分为新行并单独检查每行可能会更好。 – Sorrow 2011-06-10 09:34:16

+0

试过但没有运气,你能提供一个例子吗? – jaffa 2011-06-10 09:34:35

+0

请参阅编辑。我提供了错误的锚点,我的错。 '^'和'$'匹配行的开始和结束,而我应该使用'\ A'和'\ z'。 – Sorrow 2011-06-10 09:45:16

1

我想拆分字符串[\r\n]+,然后测试每个地址individualy。

相关问题