所以我想检查一个字符串是否采用以下格式:
结帐/00/付款
其中 00 可以是任意数字。
我尝试使用 preg_match 来执行此操作,但没有成功:
if(preg_match('/checkout/ [0-9] /payment/', $url, $matches)){
echo 'hello';
}
此外,如果字符串在“付款”一词之后有任何字符,我希望它失败,例如 checkout/00/payment/more
所以我想检查一个字符串是否采用以下格式:
结帐/00/付款
其中 00 可以是任意数字。
我尝试使用 preg_match 来执行此操作,但没有成功:
if(preg_match('/checkout/ [0-9] /payment/', $url, $matches)){
echo 'hello';
}
此外,如果字符串在“付款”一词之后有任何字符,我希望它失败,例如 checkout/00/payment/more
下面的正则表达式现在符合您的预期。请注意,我用括号括住了数字。这将捕获 $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
)
[0-9]
只匹配一个数字。如果要精确匹配两位数字,请附加{2}
: [0-9]{2}
。
您的正则表达式中有额外的空格,并且[0-9]
只会匹配一位数字。
此外,如果您以 开始和结束您的正则表达式/
,则不能/
在其中使用,除非您使用反斜杠 ( \/
) 对其进行转义。
我已经使用~
了这个。
if(preg_match('~checkout/([0-9]+)/payment$~', $url, $matches)) {
echo 'Matched! (' . $matches[1] . ')';
}
这将匹配一个或多个数字。