【问题标题】:Warning: preg_match() [function.preg-match]: No ending delimiter '^警告:preg_match() [function.preg-match]: 没有结束分隔符 '^
【发布时间】:2014-11-06 02:46:18
【问题描述】:

当我在 php 5.3 中运行它时:

public function isValidEmail($email)
{
    //$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";   
return (preg_match($pattern, $email)) ? 1 : 0;
}

我收到这条消息:

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

知道它应该是什么吗?

【问题讨论】:

  • 你的正则表达式没有分隔符$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/";
  • 您的$pattern 也被注释掉了。
  • 请务必使用 preg_quote 反斜杠您的模式中的任何其他斜杠,如下所示: $pattern = '/' 。 preg_quote("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+) *(\.[a-z]{2,3})$", '/') 。 '/';

标签: php regex


【解决方案1】:

已经指出了主要问题,您的正则表达式模式未包含在 delimiters 中。同样,您可以避免使用三元运算符,不必返回preg_match() 的值。

function isValidEmail($email) {
    $pattern = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i';
    return preg_match($pattern, $email);
}

您可以考虑使用filter_var() 函数来检查电子邮件地址是否格式正确。

function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) ? 1:0;
}

【讨论】:

  • 函数filter_var不喜欢this.example@gmail.com这样的普通有效邮件。如果在@ 之前有一个点.,则函数返回false
【解决方案2】:

你的模式应该是这样的,在模式前后加上'/'。

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

在最后一个 $ 之前加 + 号

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 2013-09-12
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-03-20
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多