【问题标题】:PHP error using the preg_match function [duplicate]使用 preg_match 函数的 PHP 错误 [重复]
【发布时间】:2013-10-07 12:46:35
【问题描述】:

我正在使用 PHP eregi 函数,但我收到通知说它已被弃用。这是我的代码:

!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))

因此,我试图用 preg_match 替换该函数,但似乎我无法为 preg_match 获得正确的模式,因为我收到以下代码错误:

!preg_match("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))

这是我从上面的代码得到的错误:

Warning: preg_match(): No ending delimiter '^' found in

感谢您的帮助。

【问题讨论】:

  • 把 / 放在正则表达式的开头和结尾
  • 您需要使用特殊字符来包含正则表达式代码,例如:~(\w+)~and flags go here
  • 这绝对不是引用问题的重复。这是关于更新 php 并用 preg_match 替换 eregi。

标签: php regex validation email-validation


【解决方案1】:

preg_match() 希望您在正则表达式字符串的开头或结尾使用分隔符:

preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/", trim($_POST['email']))

分隔符可以是多个字符,包括~%#/@ 等。请注意,当您选择分隔符时,如果该字符在正则表达式中使用,则必须使用反斜杠字符 (\) 对其进行转义。例如,使用正则表达式

http://[0-9a-z]+\.com

与分隔符/ 的组合,将要求您转义/ 的每一个出现:

/http:\/\/[0-9a-z]+\.com/

请参阅PHP manual 了解更多信息。

【讨论】:

    【解决方案2】:

    顺便说一句,为了验证电子邮件地址,您也可以使用filter_var 函数。

    $is_email_valid = filter_var($email, FILTER_VALIDATE_EMAIL);
    

    详情:http://php.net/manual/en/function.filter-var.php

    【讨论】:

      【解决方案3】:

      试试看,

      !preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/i", trim($_POST['email']))
      

      您必须使用 分隔符,例如 /

      【讨论】:

        【解决方案4】:

        您需要在正则表达式的开头和结尾使用分隔符,通常是/

        !preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/", trim($_POST['email']))
        

        手动输入:PCRE introduction/delimiters

        【讨论】:

          【解决方案5】:

          您需要对正则表达式进行分隔:

          preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/",
                      ^                                         ^
          

          【讨论】:

            猜你喜欢
            • 2015-07-06
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            • 2018-07-17
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            • 2018-06-01
            相关资源
            最近更新 更多