只是解析该类型的网址 http://sitename.com/catid/300/, http://sitename.com/catid/341/ 等等
其中catid(300,341)之后的参数仅为整数。当我在.htaccess中使用以下条件时,它可以正常工作
RewriteRule ^(abc|def|hij|klm)/([0-9]+)/$ /index3.php?catid=$1&postid=$2 [L]
但是当一个php正则表达式匹配函数时,比如preg_match,它也会为字母数字数字返回1
eg: echo preg_match('([0-9]+)','a123'); or echo preg_match('([0-9]+)',a123);
他们都返回1()true。我不知道为什么它与字母数字相匹配。我希望它只匹配数字。
我做错了什么?
答案 0 :(得分:1)
尝试preg_match('/^[0-9]+$/','a123');
答案 1 :(得分:1)
如果没有锚点,它将匹配数字,无论它们之前或之后是什么。试试锚点:
/^([0-9]+)$/
如果您不需要捕获,请尝试以下操作:
/^[0-9]+$/
结果:
php > echo preg_match('([0-9]+)','a123');
1
php > echo preg_match('/^[0-9]+$/','a123');
0
php > echo preg_match('/^[0-9]+$/',0.65);
0
php > echo preg_match('/^[0-9]+$/',666);
1
正则表达式并不总是答案。如果您只是检查一个号码,请尝试is_numeric。如果您只想要一个整数,请尝试is_int。