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/文字边界
关于使用正则表达式匹配电子邮件地址
根据规范,这并非不重要。
相关问题
- 验证电子邮件地址的最佳正则表达式是什么?
- 正则表达式很难识别电子邮件地址?
- 一个人应该多远进行一次电子邮件地址验证?
8 votes
一种替代方法是将您的正则表达式放在不包含括号的位置。 然后使用|
限定符将该表达式设为可选,它将查找0(即空字符串)或1个未捕获组的实例。
例如:
/(?: some regexp )?/
在您的情况下,正则表达式如下所示:
/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
否|
必需的“或”运算符!
这是Mozilla JavaScript正则表达式语法的文档。
2 votes
我不确定为什么要验证可选的电子邮件地址,但我建议您使用
^$|^[^@\s]+@[^@\s]+$
含义
^$ empty string
| or
^ beginning of string
[^@\s]+ any character but @ or whitespace
@
[^@\s]+
$ end of string
无论如何,您都不会停止虚假电子邮件,这样您就不会停止有效的地址。
0 votes
\ b匹配单词边界。 我认为您可以将^ $用作空字符串。