【问题标题】:Problem validating e-mail with RegEx using preg_match() in PHP在 PHP 中使用 preg_match() 验证电子邮件的问题
【发布时间】:2011-06-03 12:26:43
【问题描述】:

我无法在 PHP 中使用 preg_match() 来验证电子邮件地址。我已经使用http://www.regexer.com 工具测试了我在 Internet 上找到的 RegEx 表达式,并且可以在我的 PHP 应用程序中使用的相同输入正常工作。

正则表达式:

^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$

正则表达式:http://regexr.com?2sr2a

我在 PHP 中这样应用它:

$email   = "local@test.com";
$pattern = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";

if (false == preg_match($pattern, $email))
    echo "false";

当然,我对这封电子邮件和我测试过的其他电子邮件有误。我认为表达式格式正确,因为在正则表达式上我可以测试并且它可以工作。我申请错了什么?

提前谢谢你!

【问题讨论】:

  • 无法复制。正则表达式没问题。
  • 示例代码对我来说很好用。
  • 为我工作:ideone.com/IkQo2
  • @SirDarius:谢谢。这就是问题所在! :)
  • Gazillion duplicates - 使用 PHP 的原生 filter_var 而不是正则表达式

标签: php regex


【解决方案1】:

反斜杠字符需要通过像这样加倍来正确转义:

$pattern = "/^([a-z0-9\\+_\\-]+)(\\.[a-z0-9\\+_\\-]+)*@([a-z0-9\\-]+\\.)+[a-z]{2,6}$/ix";

使用此模式,preg_match 正确返回 1。

【讨论】:

  • 他们通常不会。仅当反斜杠位于另一个反斜杠、双引号、$、八进制文字或其中一个 ascii 转义符 \r \n \t 之前,反斜杠才会被剥离。 print "\." 将打印 \.
  • 虽然转义反斜杠不是强制性的,但强烈建议在双引号字符串中这样做,特别是如果您可能不小心插入了导致创建有效转义序列的字符。
【解决方案2】:

我不确定您的代码有什么问题,但这里有一个功能齐全的 php 函数来检查电子邮件地址:

function is_validemail($email) 
{
     return preg_match('/^[\w.-]+@([\w.-]+\.)+[a-z]{2,6}$/is', $email);
}

$email = "local@root.ws";

if(is_validemail($email)) { echo ("email validated"); } else { echo ("invalid email given"); }

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 2016-06-13
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多