Regular expression which matches a pattern, or is an empty string

I have the following Regular Expression which matches an email address format:

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

This is used for validation with a form using JavaScript. However, this is an optional field. Therefore how can I change this regex to match an email address format, or an empty string?

From my limited regex knowledge, I think \b matches an empty string, and | means "Or", so I tried to do the following, but it didn't work:

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

B 匹配一个单词边界。我认为可以用 ^ $表示空字符串。

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

^$|pattern

解释

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

参考文献


\b频道

\b在大多数情况下是一个“词界”锚。它是一个零宽度匹配,也就是一个空字符串,但是它只匹配 非常特别的地方处的那些字符串,也就是一个单词的边界处的字符串。

也就是说,\b位于:

  • 在连续的 \w\W之间(任一顺序) :
    • i.e. between a word character and a non-word character
  • Between ^ and \w
    • 例如,如果字符串以 \w开头,则在字符串的开头
  • \w$之间
    • 例如,如果字符串以 \w结尾,则在字符串的末尾

参考文献


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

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

相关问题

我不知道你为什么要验证一个可选的电子邮件地址,但我建议你使用

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

意义

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

无论如何你不会停止伪造电子邮件,这样你就不会停止有效的地址。

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

例如:

/(?: some regexp )?/

在您的例子中,正则表达式应该是这样的:

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

没有 |“或”操作员必要的!

Here is the Mozilla documentation for JavaScript Regular Expression syntax.