我正在为多行电子邮件地址寻找RegEx
。
例如:
1)单封电子邮件:
johnsmith@email.com - ok
2)两行电子邮件:
johnsmith@email.com
karensmith@emailcom - ok
3)两行电子邮件:
john smith@email.com - not ok
karensmith@emailcom
我尝试了以下内容:
((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?)+)\r*
但是当我测试它时,如果有一个有效的电子邮件地址,它似乎仍然匹配,如例3所示。
我需要一条规则,声明所有电子邮件地址必须有效。
答案 0 :(得分:3)
怎么样:
^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\s?)+)*)$
使用'^'检查字符串的开头,使用'$'检查结尾。 允许使用'\ s?'的可选空白字符。
试用http://myregexp.com/signedJar.html来测试正则表达式。
答案 1 :(得分:1)
我将字符串拆分为[\r\n]+
,然后单独测试每个地址。
答案 2 :(得分:0)
我的猜测是你可能需要在regexp结束时使用多行选项(在大多数情况下是{regexp后的/m
)。
修改您可能还想添加锚点\A
和\z
来标记输入数据的开头和结尾。锚点上有good article。
编辑使用Ruby工作的快速而肮脏的示例:
/\A\w+@\w+\.\w+(\n\w+@\w+.\.\w+)*\z/
将产生:
"test@here.pl\nthe@bar.pl".match(/\A\w+@\w+\.\w+(\n\w+@\w+\.\w+)*\z/)
=> #<MatchData "test@here.pl\nthe@bar.pl" 1:"\nthe@bar.pl">
"test@here.pl\nthebar.pl".match(/\A\w+@\w+\.\w+(\n\w+@\w+\.\w+)*\z/)
=> nil
"test@here.pl".match(/\A\w+@\w+\.\w+(\n\w+@\w+\.\w+)*\z/)
=> #<MatchData "test@here.pl" 1:nil>
"test@here".match(/\A\w+@\w+\.\w+(\n\w+@\w+\.\w+)*\z/)
=> nil
你可以改进正则表达式,它应该工作。关键是使用\A
和\z
锚点。 <{1}}修饰符不是必需的。