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

IT技术 javascript regex email-validation string
2021-02-01 14:25:47

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

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

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

根据我有限的正则表达式知识,我认为\b匹配一个空字符串,|表示“或”,所以我尝试执行以下操作,但没有奏效:

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

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

^$|pattern

解释

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

参考


\b

\b在大多数风味中是一个“词边界”锚。它是一个零宽度匹配,即一个空字符串,但它只在非常特定的地方匹配那些字符串,即在单词的边界处。

也就是说,\b位于:

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

参考


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

根据规范,这不是微不足道的。

相关问题

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

例如:

/(?: some regexp )?/

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

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

不需要|“或”运算符!

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

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

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

意义

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

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

如果未在字段中输入地址,则会在数据库中输入 NULL 值,因此在发送新闻通讯等时可以处理此问题。我很欣赏这不会阻止虚假地址,我也不会认为使用 Regex 完全有可能,但它至少可以最大限度地减少人为错误
2021-03-23 14:25:47
只是想检查一个空字符串。^$ 工作
2021-04-05 14:25:47
我也经常有客户要求这样做。这真的只是为了防止客户做一些愚蠢的事情,比如在电子邮件字段中输入他们的电话号码。
2021-04-11 14:25:47

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