正则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。