Preg_Match - 正则表达式错误 [重复]

Posted

技术标签:

【中文标题】Preg_Match - 正则表达式错误 [重复]【英文标题】:Preg_Match - RegEx Error [duplicate] 【发布时间】:2013-10-05 00:16:24 【问题描述】:

使用以下代码

$regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
    ."@[a-z0-9-]+(\.[a-z0-9-]1,)*"
    ."\.([a-z]2,)1$";

    if(!preg_match($regex,$subemail))
      $form->setError($field, "* Email invalid");
    

    $subemail = stripslashes($subemail);

我收到以下错误

Warning: preg_match() [function.preg-match]: No ending delimiter '^' found 

任何帮助将不胜感激。

【问题讨论】:

即使您修复分隔符,您的模式也会在 很多 电子邮件地址上失败:emailtester.pieterhordijk.com/test-pattern/NTE php.net/manual/en/function.filter-var.php 【参考方案1】:

现在它认为^ 是开始分隔符,因此期待在末尾有另一个分隔符。您可以使用任意数量的分隔符,例如//,或@@,或<> 等。下面的一个使用// 作为它的开/关分隔符:

     $regex = "/^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
         ."@[a-z0-9-]+(\.[a-z0-9-]1,)*"
         ."\.([a-z]2,)1$/";

【讨论】:

【参考方案2】:

你必须用#/ 包围你的模式,像这样:"#[abc]+#"

我个人使用 # 因为它比 / 更明显

对于电子邮件验证标准 PHP 函数,请使用 filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)(请参阅 http://www.php.net/manual/en/function.filter-var.php)

【讨论】:

以上是关于Preg_Match - 正则表达式错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式,PHP preg_match 使函数如何在字符串以 start_to_date 开头时返回 true [重复]

正则表达式 preg_match 匹配中文

php正则表达式转义特殊字符[重复]

PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat

使用php preg_match(正则表达式)将camelCase单词拆分为单词

PHP 5.6.10-preg_match():编译失败:字符类中的范围在偏移100处无效[重复]