正则表达式的电子邮件不接受多个点或撇号

时间:2014-05-29 09:57:59

标签: .net regex

我知道有很多关于正则表达式的问题 using a regular expression to validate an email addressregular expression to match single dot but not two dots

我创建了一个如下所示的正则表达式,它接受'(撇号)和.(点)。

/^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$/

但它也会接受连续的双点和连续的双撇号。我该如何预防?

E.g:

john's.presonal@somedomain.com是正确的。

john's..presonal@somedomain.com不正确。

john's.presonal.email@somedomain.com是正确的。

My Fiddle Here

我理解在超链接之前查看我需要使用'/^([^\.]|([^\.])\.[^\.])*$/',但不知道如何创建我的reg-ex!

2 个答案:

答案 0 :(得分:1)

只需在^

之后添加此否定预测即可
(?!.*(?:''|\.\.))

这是如何运作的?

(?!.*(?:''|\.\.))是一个负面的先行者断言:在当前位置(这是字符串的开头),我们无法匹配任何字符后跟两个撇号或两个点。

其他调整

由于这不是问题,我还没有分析你的正则表达式的其余部分。但是,一目了然:

  1. {1,}可以写成+
  2. 您的初始[\w-\.\']表示电子邮件可以以点(以及其他字符)开头。你确定它有效吗?如果没有,请从允许的集合中仅使用一个字符开始匹配,然后仅添加量化集合。
  3. 最后{2,3}适用于comus等顶级域名。但是,您确定要排除mobi
  4. 等顶级域名

    The Wheel

    作为参考,以下是"车轮"已经发明了。这些是来自RegexBuddy库的两个电子邮件表达式。

    \b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b
    

    RFC2822:

    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    

答案 1 :(得分:1)

匹配每封有效电子邮件的正则表达式为very complicated

您应该在PHP中使用filter_var($email, FILTER_VALIDATE_EMAIL)或在Objective-C中使用[NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error]