1

所以我想检查一个字符串是否采用以下格式:

结帐/00/付款

其中 00 可以是任意数字。

我尝试使用 preg_match 来执行此操作,但没有成功:

if(preg_match('/checkout/ [0-9] /payment/', $url, $matches)){
         echo 'hello';  
}

此外,如果字符串在“付款”一词之后有任何字符,我希望它失败,例如 checkout/00/payment/more

4

3 回答 3

4

下面的正则表达式现在符合您的预期。请注意,我用括号括住了数字。这将捕获 $matches 中的数字,以便您以后使用它。

<?php
header('Content-Type: text/plain');

foreach(array(0,5,10,99) as $i)
{
    $num = str_pad($i, 2, '0', STR_PAD_LEFT);
    $url = 'checkout/'.$num.'/payment';

    if(preg_match('/checkout\/([0-9]+)\/payment/i', $url, $matches))
    {
        echo 'url: "'.$url."\"\n";
        echo 'hello: '.$matches[1]."\n";
        print_r($matches);
    }

    echo "\n\n";
}
?>

此代码产生以下输出:

url: "checkout/00/payment"
hello: 00
Array
(
    [0] => checkout/00/payment
    [1] => 00
)


url: "checkout/05/payment"
hello: 05
Array
(
    [0] => checkout/05/payment
    [1] => 05
)


url: "checkout/10/payment"
hello: 10
Array
(
    [0] => checkout/10/payment
    [1] => 10
)


url: "checkout/99/payment"
hello: 99
Array
(
    [0] => checkout/99/payment
    [1] => 99
)

preg_match 手册页

preg_match_all 手册页

PCRE 正则表达式语法手册页

正则表达式模式中可能的修饰符

于 2012-11-28T19:45:30.437 回答
2

[0-9]只匹配一个数字。如果要精确匹配两位数字,请附加{2}: [0-9]{2}

于 2012-11-28T19:45:53.830 回答
1

您的正则表达式中有额外的空格,并且[0-9]只会匹配一位数字。

此外,如果您以 开始和结束您的正则表达式/,则不能/在其中使用,除非您使用反斜杠 ( \/) 对其进行转义。

我已经使用~了这个。

if(preg_match('~checkout/([0-9]+)/payment$~', $url, $matches)) {
    echo 'Matched! (' . $matches[1] . ')';
}

这将匹配一个或多个数字。

演示:codepad.viper-7.com/qoKI5G

于 2012-11-28T19:45:52.800 回答