电子邮件验证排放

时间:2017-02-27 13:59:42

标签: regex

(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s|\s*,\s*|\s*$))

我有这个正则表达式验证电子邮件

我正在使用http://www.regextester.com/来测试它。所以它有效

sadas@asd.com; asdas@c.com; asdasda@casc.com; asjdas@asc.com, asdas@asd.com 

但是如果客户会写那个

asjdas@asc.com,asdas@asd.com 

它说这是假的。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

基本上,你需要做的是,通过在它们之前放一个反斜杠(.)来逃避所有点(\(因为你匹配一个文字点) ,而不是any character。因此,以下正则表达式将起作用:

(([a-zA-Z0-9_\-\.]+)@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)(\s*;\s|\s*,\s*|\s*$))

DEMO

答案 1 :(得分:0)

这不符合预期的原因是您没有正确转义域捕获中的.

默认情况下,.表示“任意字符”,其中\.表示“句点字符”。

目前asjdas@asc.com,asdas@asd.com匹配为:

  1. @的任何内容(有一些警告 - [a-zA-Z0-9_-.]+应该是[a-zA-Z0-9_\-\.]+或将短划线移到开头[-a-zA-Z0-9_\.]+,因此不会将其视为范围。)
  2. @
  3. a-z,A-Z,0-9或短划线1次或更多次的任何内容,后跟任何字符,1次或更多次 - 这是获取逗号的位置:([a-zA-Z0-9-]+.)+
  4. a-z中的任何东西,A-Z在2到4次之间。
  5. 空格或行尾。
  6. 因此,,和第二个@都将此推送到那里的3项。

    也就是说,正如其他人所提到的,这是一个相当奇怪的正则表达式,用于从字符串中捕获电子邮件 - 并留下一些有效的电子邮件 - 例如TLD现在可以是任意长度({{1} } .museum是我遇到的两个,有plenty more),.aero现在在电子邮件地址的名称部分很常见。

    following regex将获取所有电子邮件地址,以及字符串中的电子邮件地址:

    '

    这将忽略空间,处理通用和品牌TLD,并且还提供对基于IP的电子邮件的有限支持(例如neb@123.123.123),但对于有效的电子邮件(即带有撇号,加号,等)和无效IP(超过256的任何八位字节)。