我有以下与电子邮件地址格式匹配的正则表达式:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$
这用于使用 JavaScript 对表单进行验证。但是,这是一个可选字段。因此,如何更改此正则表达式以匹配电子邮件地址格式或空字符串?
根据我有限的正则表达式知识,我认为\b
匹配一个空字符串,并且|
表示“或”,所以我尝试执行以下操作,但它不起作用:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
我有以下与电子邮件地址格式匹配的正则表达式:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$
这用于使用 JavaScript 对表单进行验证。但是,这是一个可选字段。因此,如何更改此正则表达式以匹配电子邮件地址格式或空字符串?
根据我有限的正则表达式知识,我认为\b
匹配一个空字符串,并且|
表示“或”,所以我尝试执行以下操作,但它不起作用:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
要匹配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
无论如何,您都不会阻止虚假电子邮件,这样您就不会阻止有效地址。
\b 匹配单词边界。我认为您可以将 ^$ 用于空字符串。