【问题标题】:Need help with regular expression for URLs需要有关 URL 正则表达式的帮助
【发布时间】:2011-07-22 16:21:09
【问题描述】:

只是解析类型的 url 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。我不知道为什么它匹配字母数字。我希望它只匹配数字。

我做错了什么?

【问题讨论】:

  • 你的 preg_match 基本上归结为“如果字符串中有一个或多个数字 ANYWHERE 则匹配”

标签: php .htaccess


【解决方案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

【讨论】:

  • 使用 echo preg_match('^[0-9]+$','a123');给出这个错误'没有找到结束分隔符'^''
  • 感谢以下情况... preg_match('/^[0-9]+$/',0.65);也返回真 (0)。 :(
  • 它对我有用。我更新了答案中的结果以显示这一点。
【解决方案2】:

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

【讨论】:

  • 感谢队友但 preg_match('/^[0-9]+$/',0.65);也返回 true (0)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
相关资源
最近更新 更多