正则expression式匹配一个模式,或者是一个空string
我有以下正则expression式匹配一个电子邮件地址格式:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$
这用于使用JavaScript对表单进行validation。 但是,这是一个可选字段。 因此,我怎样才能改变这个正则expression式匹配一个电子邮件地址格式,或一个空string?
从我有限的正则expression式知识,我认为\b
匹配一个空string,和|
意思是“或”,所以我试图做到以下,但它没有工作:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
要匹配pattern
或空string,请使用
^$|pattern
说明
-
^
和$
分别是string锚的开始和结束。 -
|
用来表示替代,例如this|that
。
参考
- regular-expressions.info/Anchors和Alternation
在\b
\b
最有味道的是一个“文字边界”的主播。 这是一个零宽度的匹配,即一个空string,但它只匹配这些string在非常特定的地方 ,即在一个字的边界。
也就是\b
位于:
- 在连续
\w
和\W
(任一顺序):- 即在单词字符和非单词字符之间
-
^
和\w
- 即,如果以
\w
开头,则在string的开头
- 即,如果以
-
\w
和$
- 即,如果以
\w
结尾,则在string的末尾
- 即,如果以
参考
- regular-expressions.info/Word边界
使用正则expression式来匹配电子邮件地址
这是不平凡的,取决于规格。
相关问题
- 什么是validation电子邮件地址的最佳正则expression式?
- 正则expression式识别电子邮件地址很难?
- 一个人应该采取多大的电子邮件地址validation?
另一种方法是将您的正则expression式放在非捕获括号中。 然后使该expression式可选使用?
限定符,它将查找0(即空string)或1个未捕获组的实例。
例如:
/(?: some regexp )?/
在你的情况下,正则expression式看起来像这样:
/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
没有|
“或”操作员必要!
这里是JavaScript正则expression式语法的Mozilla文档。
我不知道你为什么要validation一个可选的电子邮件地址,但我build议你使用
^$|^[^@\s]+@[^@\s]+$`
含义
^$ empty string | or ^ beginning of string [^@\s]+ any character but @ or whitespace @ [^@\s]+ $ end of string
无论如何,你不会停止假电子邮件,这样你就不会停止有效的地址。
\ b匹配一个字的边界。 我想你可以使用^ $作为空string。