【问题标题】:Problems with PHP PCREPHP PCRE 的问题
【发布时间】:2009-10-14 03:15:37
【问题描述】:

我在使用 PHP PCRE 时遇到问题,而且我已经习惯了 POSIX,所以我不太确定自己做错了什么。基本上,这个函数最多匹配 10 个用逗号分隔的数字。但是,它也匹配字符串sdf(可能还有许多其他字符串),我看不出原因。谁能帮帮我?

$pattern='^\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?^';

$leftcheck=preg_match($pattern, $leftmodules);
$centercheck=preg_match($pattern, $centermodules);
$rightcheck=preg_match($pattern, $rightmodules);

if(!$leftcheck OR !$centercheck OR !$rightcheck)
{
$editpage = $_SERVER['HTTP_REFERER'].'?&error=1';
die("Location:$editpage");
}

【问题讨论】:

  • @waiwai933:您的主要问题是您的正则表达式以 ^ 而不是 $ 结尾
  • Asaph,胡萝卜被用作正则表达式的分隔符。
  • 考虑到可读性,这不是最佳选择。

标签: php regex preg-match pcre


【解决方案1】:
^\d{1,5}(, *\d{1,5}){0,9}$

【讨论】:

  • 您可能应该在模式中包含/.../ 分隔符。
【解决方案2】:

我假设如下:

  • 空间可能存在也可能不存在。
  • 数字可以是任意长度。
  • 只允许使用数字、空格和逗号。
  • 允许尾随逗号不带数字。
  • 1 到 10 个数字之间用逗号分隔即可。

鉴于:

$pattern = '/^(\d+,* *){1,10}$/';

有效。

【讨论】:

    【解决方案3】:

    据我所知,您提供的正则表达式将匹配您传递给它的 anything。这就是为什么

    \d{0,5}     #\d matches any digit character, while {0,5} means the
                #preceding character must be repeated between **0** and five times
    

    所以你的正则表达式本质上是短路的。引擎看到你的字符串的第一个字符并说“一个数字重复了 0 次吗?是的?好的,它是匹配的!

    【讨论】:

      【解决方案4】:

      我认为如果您的电话号码仅用逗号分隔,则应该这样做

      $pattern = '^\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5}$';
      

      【讨论】:

        【解决方案5】:

        您需要在两个相等符号之间包含模式才能使其有效。人们通常使用 /。

        $pattern = '/some pattern/';
        

        要匹配您希望在开头有 ^ 和在结尾有 $ 的整个内容。弄错了可能是您的sdf 匹配的原因。

        $pattern = '/^whole pattern match$/';
        

        如何分隔数字有点令人困惑。是逗号还是空格?两者都好吗?没有怎么办?不过,这是我的最佳猜测。

        $pattern = '/^\d{,5}[, ](\d{,5}[, ]){,9}$/';
        

        【讨论】:

        • ^ 被用作两个相等的符号。
        • 哇,这真是误导。
        猜你喜欢
        • 1970-01-01
        • 2021-03-28
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 2011-09-08
        相关资源
        最近更新 更多