我有以下正则表达式可以匹配电子邮件地址的格式:
^[\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]+)?$/
不需要使用 |
或 "or" 运算符!
这里 是 JavaScript 正则表达式语法的 Mozilla 文档。
我不确定为什么您想要验证可选电子邮件地址,但我建议您使用
^$|^[^@\s]+@[^@\s]+$
意义^$ empty string
| or
^ beginning of string
[^@\s]+ any character but @ or whitespace
@
[^@\s]+
$ end of string
无论如何,您都无法停止假电子邮件,而用这种方法,您也不会停止有效的地址。
\b 匹配单词边界。我认为你可以使用 ^$ 来表示空字符串。
^$ 在正则表达式中如果有多个模式时对我无效。
另一个解决方案:
/(pattern1)(pattern2)?/g
"pattern2"是可选的。如果为空,则不匹配。
?匹配(pattern2)零次或一次。
在这里测试(“m”用于多行示例目的):https://regex101.com/r/mezfvx/1