我正在解析http://sitename.com/catid/300/、http://sitename.com/catid/341/等类型的urls
其中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。我不知道为什么它和字母数字相匹配。我希望它只匹配数字。
我做错了什么?
发布于 2011-07-23 00:25:32
没有锚点,它将匹配数字,而不管它们之前或之后是什么。尝试使用锚点:
/^([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。
发布于 2011-07-23 00:24:57
试试preg_match('/^[0-9]+$/','a123');
https://stackoverflow.com/questions/6792982
复制相似问题