与模式匹配的正则表达式,或者是空字符串

Cur*_*urt 68 javascript regex string email-validation

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

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$
Run Code Online (Sandbox Code Playgroud)

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

从我有限的正则表达式知识,我认为\b匹配一个空字符串,并|意味着"或",所以我尝试做以下,但它不起作用:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
Run Code Online (Sandbox Code Playgroud)

pol*_*nts 165

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

^$|pattern
Run Code Online (Sandbox Code Playgroud)

说明

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

参考


\b

\b在大多数风味是一个"字边界"锚.它是一个零宽度匹配,即一个空字符串,但它只匹配那些特定位置的字符串,即一个字的边界.

也就是说,\b位于:

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

参考


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

根据规格,这不是微不足道的.

相关问题


Jgo*_*731 9

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

例如:

/(?: some regexp )?/
Run Code Online (Sandbox Code Playgroud)

在您的情况下,正则表达式看起来像这样:

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
Run Code Online (Sandbox Code Playgroud)

不需要|"或"操作员!

以下是JavaScript正则表达式语法的Mozilla文档.


Zan*_*ano 8

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

^$|^[^@\s]+@[^@\s]+$
Run Code Online (Sandbox Code Playgroud)

意义

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string
Run Code Online (Sandbox Code Playgroud)

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