匹配模式或为空字符串的正则表达式


84

我有以下与电子邮件地址格式匹配的正则表达式:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

这用于使用JavaScript进行表单验证。但是,这是一个可选字段。因此,如何更改此正则表达式以匹配电子邮件地址格式或空字符串?

根据我对正则表达式的有限了解,我认为\b匹配一个空字符串,并|表示“ Or”,因此我尝试执行以下操作,但此方法无效:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

5
如果您必须验证电子邮件,请尽可能放宽。您会惊讶地发现,使用自制的正则表达式错过真实,有效和功能正常的电子邮件地址有多么容易。例如,您的正则表达式将在以下有效地址上失败:joe_blow @ foo.com,micro $ oft @ apple.com,root @ localhost,siegfried + roy @ lasvegas.com。
Zano

同意Zano,只需看一下此正则表达式ex-parrot.com/pdw/Mail-RFC822-Address.html
Anders

@Anders哇,多数民众赞成在一个非常复杂的正则表达式!我认为我低估了正则表达式的复杂性
Curt,2010年

4
不,我认为您已经低估了电子邮件验证的复杂性:-)
Zano 2010年

Answers:


199

要匹配pattern或为空字符串,请使用

^$|pattern

说明

  • ^$分别是字符串锚点的开头和结尾。
  • |用于表示替代项,例如this|that

参考文献


\b

\b在大多数情况下,都是“单词边界”锚。这是一个零宽度的匹配项,即一个空字符串,但仅在非常特定的位置(即单词边界)匹配那些字符串。

\b位于:

  • 在连续\w\W(任意顺序)之间:
    • 即在一个单词字符和一个非单词字符之间
  • 介于^和之间\w
    • 即在字符串的开头,如果它以 \w
  • 介于\w和之间$
    • 即在字符串的末尾,如果它以 \w

参考文献


关于使用正则表达式匹配电子邮件地址

根据规范,这并非无关紧要。

相关问题


10

一种替代方法是将您的正则表达式放在非捕获括号中。然后,使用?限定符使该表达式为可选,它将查找0(即空字符串)或1个未捕获组的实例。

例如:

/(?: some regexp )?/

在您的情况下,正则表达式如下所示:

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

无需|“或”运算符!

是Mozilla JavaScript正则表达式语法的文档。


8

我不确定为什么要验证可选的电子邮件地址,但建议您使用

^$|^[^@\s]+@[^@\s]+$

含义

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string

无论如何,您都不会停止虚假电子邮件,这样您就不会停止有效的地址。


如果未在该字段中输入地址,则会在数据库中输入一个NULL值,因此在发送新闻通讯等问题时可以处理该值。认为Regex完全有可能,但是至少可以将人为错误降到最低
Curt

1
我也有客户经常要求这样做。实际上,这只是为了防止客户做一些愚蠢的事情,例如在电子邮件字段中输入他们的电话号码。
凯利·根顿

只是想检查一个空的字符串。^ $起作用
Subhashi

1

\ b匹配单词边界。我认为您可以将^ $用作空字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.