我知道有很多关于正则表达式的问题 using a regular expression to validate an email address和regular 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
是正确的。
我理解在超链接之前查看我需要使用'/^([^\.]|([^\.])\.[^\.])*$/'
,但不知道如何创建我的reg-ex!
答案 0 :(得分:1)
只需在^
(?!.*(?:''|\.\.))
这是如何运作的?
(?!.*(?:''|\.\.))
是一个负面的先行者断言:在当前位置(这是字符串的开头),我们无法匹配任何字符后跟两个撇号或两个点。
其他调整
由于这不是问题,我还没有分析你的正则表达式的其余部分。但是,一目了然:
{1,}
可以写成+
[\w-\.\']
表示电子邮件可以以点(以及其他字符)开头。你确定它有效吗?如果没有,请从允许的集合中仅使用一个字符开始匹配,然后仅添加量化集合。{2,3}
适用于com
和us
等顶级域名。但是,您确定要排除mobi
?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]
。