使用preg_match检查带有“通配符”的URL

时间:2012-11-28 19:43:06

标签: php preg-match

所以我想检查字符串格式是否为:

结帐/ 00 /支付

其中00可以是任何数字。

我尝试使用preg_match来做到这一点,但它没有用完:

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

此外,如果字符串在“付款”字样后面有任何字符,我希望它失败 例如结帐/ 00 /付款/更多

3 个答案:

答案 0 :(得分: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 manual page

preg_match_all manual page

PCRE regex syntax manual page

Possible modifiers in regex patterns

答案 1 :(得分:2)

[0-9]仅匹配一位数字。如果您想要恰好匹配两位数,请附加{2}[0-9]{2}

答案 2 :(得分:1)

你的正则表达式中有多余的空格,而[0-9]只会匹配一位数。

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

我已使用~代替此。

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

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

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