2011-07-22 87 views
0

正则表达式帮助只是解析型 http://sitename.com/catid/300/的网址, http://sitename.com/catid/341/ 等等等等是否需要针对URL

其中CATID(300341)之后的参数仅仅是整数。当我在.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( )真正。我不知道它为什么匹配字母数字。我希望它只匹配数字。

我在做什么错?

+1

你的preg_match基本上归结为“匹配,如果有任何一个或多个数字在任何字符串” –

回答

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

+0

using echo preg_match('^ [0-9] + $','a123');给出这个错误'无结束分隔符'^'找到' –

+0

你需要斜杠。 – gpojd

+0

谢谢bu以下情况... preg_match('/^[0-9] + $ /',0.65);也返回true(0)。 :( –

1

尝试preg_match('/^[0-9]+$/','a123');

+0

感谢队友但preg_match('/^[0-9] + $ /',0.65);也返回true(0)。 –