【问题标题】:Regex empty string or email正则表达式空字符串或电子邮件
【发布时间】:2011-07-01 03:24:51
【问题描述】:

我在 SO 中发现了很多正则表达式电子邮件验证,但我没有找到任何可以接受空字符串的方法。这只能通过正则表达式吗?只接受空字符串或电子邮件?我只想在 Regex 上使用它。

【问题讨论】:

    标签: regex email string


    【解决方案1】:

    这个正则表达式模式将匹配一个空字符串:

    ^$
    

    这将(粗略地)匹配电子邮件或空字符串:

    (^$|^.*@.*\..*$)
    

    【讨论】:

    • 需要考虑的事情,做 ^(|.*@.*\..*)$ 应该与它说的空白或 this 的效果相同,只使用一次 ^ 和 $ 来整理它上升一点。
    • 这已经很老了,但我只是偶然发现了这一点,并且对答案有疑问。在某些情况下,字符串的开头被隐藏但仍与^ 匹配,在这种情况下,您实际上是在寻找电子邮件或在字符串中间什么都没有。对于这个(email_regex)? 更合适。
    • 在尝试使用 RegEx 进行验证之前,请务必先了解电子邮件验证的复杂程度。 stackoverflow.com/questions/201323/…
    • 这将匹配以下电子邮件 test.test@test。我认为这个更好 ^$|^[^\s@]+@[^\s@]+\.[^\s@]+$ 因为它会接受像 test@test.se 之类的电子邮件
    • 在特定的 Java 应用程序中,^$ 不起作用,但 ^(?!.) 起作用:[^ 字符串开头,(?!) 负前瞻,. 任何字符 - 不包括换行]
    【解决方案2】:

    匹配空字符串或电子邮件

    (^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)
    

    匹配空字符串或电子邮件,但也匹配任意数量的空格

    (^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)
    

    查看更多关于匹配正则表达式的电子邮件:

    http://www.regular-expressions.info/email.html

    【讨论】:

      【解决方案3】:

      不要将电子邮件与正则表达式匹配。它是extremely ugly and long and complicated,您的正则表达式解析器可能无论如何都无法处理它。尝试找到一个库例程来匹配它们。如果您只想解决匹配电子邮件地址的实际问题(也就是说,如果您想要(通常)工作的错误代码),请使用其他人提交的 regular-expressions.info 链接.

      至于空字符串,^$被多人提及,可以正常工作。

      【讨论】:

      • 丑陋的正则表达式实际上可以由正则表达式解析器处理。不使用正则表达式只是因为它丑陋是愚蠢的。
      • 这不是建设性的。 RegEx 已经过试验和测试(远非丑陋——你会说它的工作方式非常优雅吗?)。在没有任何可能解决方案指导的情况下含糊地建议一个图书馆,这完全违背了回应的目的。大家需要收藏:code.tutsplus.com/tutorials/…
      • 记录:如果我知道 OP 使用什么语言,我会很高兴推荐一个特定的库。由于这是一个与语言无关的问题,我的选择相当有限。
      • Regex 不应该很漂亮。按照这种逻辑,没有人应该使用正则表达式。如果你对一个图书馆取代它如此坚定,那么你认为图书馆会做什么?它要么会有很长、很复杂的代码,要么会使用正则表达式……到那时,您不妨实现自己的“库”。现在,如果有人不知道如何使用正则表达式,他们可能不应该负责验证电子邮件地址......
      • @Kevin 另外,不,这绝对不是同一个意思,因为它的上下文:“不要将电子邮件与正则表达式匹配”意味着“不要使用正则表达式”。 “不要将电子邮件与单个正则表达式匹配”意味着“一个正则表达式不会削减它。”
      【解决方案4】:

      上面的答案有效($ 为空),但我刚刚尝试过,它也可以像这样留空:

      /\A(INTENSE_EMAIL_REGEX|)\z/i
      

      相反的顺序

      /\A(|INTENSE_EMAIL_REGEX)\z/i
      

      【讨论】:

        【解决方案5】:

        我更喜欢/^\s+$|^$/gi 来匹配空格和空格。

        console.log("  ".match(/^\s+$|^$/gi));
        console.log("".match(/^\s+$|^$/gi));

        【讨论】:

        • 如果您使用 ^\s*$ 则不需要 or 大小写。也不需要 g 或 i 修饰符,因为这匹配整行并且不涉及任何带有大小写的字符。
        【解决方案6】:

        这将解决,它将接受空字符串或确切的电子邮件 ID

        "^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
        

        【讨论】:

        • 你能不能描述得更详细一点。
        【解决方案7】:

        如果您在 rails 中使用它 - 您可以设置 activerecord 验证 allow_blank: true

        作为:

        validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
        

        【讨论】:

          猜你喜欢
          • 2017-07-13
          • 1970-01-01
          • 2011-08-20
          • 1970-01-01
          • 2013-04-09
          • 1970-01-01
          • 1970-01-01
          • 2013-10-07
          • 2011-12-28
          相关资源
          最近更新 更多