【问题标题】:php regex too strictphp正则表达式太严格
【发布时间】:2009-11-27 19:01:58
【问题描述】:

只是想知道为什么这太严格了,我可以发送非常简化的电子邮件至 tim@yahoo.com 或 two@google.com

但如果我不再发送电子邮件 (sacagawea@gmail.com),它就不会被发送。

相反,它回显了我的错误消息:提供的电子邮件地址无效

    // Create a function to check email 
function checkEmail($email)
{
// Add some regex 
  return preg_match('/^\S+@[\w\d.-]{2,}\.[\w]{2,6}$/iU', $email) ? TRUE : FALSE;
}

【问题讨论】:

  • 请不要使用cond ? TRUE : FALSE,而只有cond 可以使用。
  • 谢谢,抱歉没看到。

标签: php


【解决方案1】:

如果您可以访问 php 5.2 或更高版本,则应使用filter 函数:

function checkEmail($email){
  return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

或验证它,“the right way”。

【讨论】:

    【解决方案2】:

    这部分

    @[\w\d.-]{2,}
    

    吃饱了

    @gmail.com
    

    这部分什么都不做

    [\w\d.-]{2,}
    

    匹配。

    最好重用已经证明的东西,例如http://www.regular-expressions.info/email.html

    【讨论】:

    • 感谢您的链接,只是想知道您的键盘上的 Ctrl+F 是否使用某种类型的正则表达式来查找内容,我想是的,它甚至可以选择匹配大小写,但他们没有称它为正则表达式,只需查找?
    • 嗯? Ctrl+F 的行为完全取决于当我点击它们时哪个应用程序接收到这些键。
    • 我的意思是它使用某些匹配项的方式,即使它是 Web 浏览器、word doc、命令提示符、shell 控制台或 notepad++,或者只是 grepping。
    • 目标通常不是匹配给定的案例并使用匹配的数据做一些事情吗?阻止或允许某些电子邮件或替换某些单词、重命名目录等?
    • @Newb - 好吧,让我猜猜你在问什么。您问是否所有 FIND 操作都使用 RegEx?答案是不。他们为什么要这样做?如果我想在包含“abc hold hole hulk holabc”的文件中搜索字符串“hola”,我可以只查找字符串本身,不需要正则表达式魔法。 RegEx 允许您(开发人员)使用一个表达式(正则表达式)而不是多个表达式(文字字符串)来搜索各种字符串。你问的是这个吗?
    【解决方案3】:

    我通常不会为检查电子邮件的有效性而烦恼。我只需要检查“@”前面和后面是否有一个值。就这样。剩下的“检查”工作,MTA 将为我完成。如果它的电子邮件无效,我会收到 MTA 的回复。如果它能够发送出去,这意味着该电子邮件很可能是有效的。

    【讨论】:

      【解决方案4】:

      请尝试

      '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/'
      

      它也适用于email@sub.domain.tl的子域电子邮件地址

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-11
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 2014-10-12
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多