【问题标题】:Regular expression which matches a pattern, or is an empty string匹配模式或为空字符串的正则表达式
【发布时间】:2010-07-26 09:04:49
【问题描述】:

我有以下与电子邮件地址格式匹配的正则表达式:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

这用于使用 JavaScript 对表单进行验证。但是,这是一个可选字段。因此,如何更改此正则表达式以匹配电子邮件地址格式或空字符串?

根据我有限的正则表达式知识,我认为\b 匹配一个空字符串,而| 表示“或”,所以我尝试执行以下操作,但没有成功:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

【问题讨论】:

  • 如果您必须验证电子邮件,请尽可能宽容。您会惊讶地发现,使用自制的正则表达式很容易错过真实、有效和实用的电子邮件地址。例如,您的正则表达式将在以下有效地址上失败:joe_blow@foo.com、micro$oft@apple.com、root@localhost、siegfried+roy@lasvegas.com。
  • 同意Zano,看看这个正则表达式ex-parrot.com/pdw/Mail-RFC822-Address.html
  • @Anders 哇,这是一个非常复杂的正则表达式!我想我误解了正则表达式的复杂性
  • 不,我认为您误解了电子邮件验证的复杂性 :-)

标签: javascript regex email-validation string


【解决方案1】:

要匹配pattern 或空字符串,请使用

^$|pattern

说明

  • ^$ 分别是字符串锚点的开头和结尾。
  • | 用于表示替代品,例如this|that

参考文献


开启\b

\b 在大多数情况下是“单词边界”锚。这是一个零宽度匹配,即一个空字符串,但它只匹配非常特定位置的那些字符串,即单词的边界。

\b位于:

  • 在连续的\w\W 之间(任意顺序):
    • 即在单词字符和非单词字符之间
  • ^\w 之间
    • 即如果它以 \w 开头,则在字符串的开头
  • \w$ 之间
    • 即如果它以 \w 结尾,则在字符串的末尾

参考文献


关于使用正则表达式匹配电子邮件地址

这取决于规范。

相关问题

【讨论】:

    【解决方案2】:

    另一种方法是将您的正则表达式放在非捕获括号中。然后使用 ? 限定符将该表达式设为可选,它将查找 0(即空字符串)或 1 个未捕获组的实例。

    例如:

    /(?: some regexp )?/
    

    在你的情况下,正则表达式看起来像这样:

    /^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
    

    不需要|“或”运算符!

    Here 是关于 JavaScript 正则表达式语法的 Mozilla 文档。

    【讨论】:

      【解决方案3】:

      我不确定您为什么要验证可选的电子邮件地址,但我建议您使用

      ^$|^[^@\s]+@[^@\s]+$
      

      意义

      ^$        empty string
      |         or
      ^         beginning of string
      [^@\s]+   any character but @ or whitespace
      @         
      [^@\s]+
      $         end of string
      

      无论如何,您都不会阻止虚假电子邮件,这样您就不会阻止有效地址。

      【讨论】:

      • 如果没有在字段中输入地址,则会在数据库中输入 NULL 值,因此在发送时事通讯等时可以处理。我很感激这不会停止假地址,我认为 Regex 根本不可能,但它至少可以最大限度地减少人为错误
      • 我也有客户经常要求这个。这实际上只是为了防止客户做一些愚蠢的事情,比如在电子邮件字段中输入他们的电话号码。
      • 只是想检查一个空字符串。 ^$ 工作
      【解决方案4】:

      \b 匹配单词边界。我认为您可以将 ^$ 用于空字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 2015-11-14
        • 2015-07-11
        • 2022-06-16
        • 2023-03-13
        相关资源
        最近更新 更多