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

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

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

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

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

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
Curt asked 2019-10-13T04:49:22Z
4个解决方案
146 votes

要匹配\w或一个空字符串,请使用

^$|pattern

说明

  • \w$分别是弦锚的起点和终点。
  • \w用于表示替代项,例如 $

参考

  • Regular-expressions.info/锚点和替代

\w

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

也就是说,\w位于:

  • 在连续的\w$之间(两种顺序):
    • 即在文字字符与非文字字符之间
  • \w$之间
    • 即在字符串的开头(如果以\w开头)
  • \w$之间
    • 即在字符串的末尾(如果以\w结尾)

参考

  • Regular-expressions.info/文字边界

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

根据规范,这并非不重要。

相关问题

  • 验证电子邮件地址的最佳正则表达式是什么?
  • 正则表达式很难识别电子邮件地址?
  • 一个人应该多远进行一次电子邮件地址验证?
polygenelubricants answered 2019-10-13T04:52:02Z
8 votes

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

例如:

/(?: some regexp )?/

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

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

|必需的“或”运算符!

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

Jgonzalez731 answered 2019-10-13T04:52:56Z
2 votes

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

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

含义

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

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

Zano answered 2019-10-13T04:53:38Z
0 votes

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

pritaeas answered 2019-10-13T04:54:04Z
translate from https://stackoverflow.com:/questions/3333461/regular-expression-which-matches-a-pattern-or-is-an-empty-string