-1

我有一个在前端按 id 抓取页面的 cms,如下所示:

$pageid = ereg_replace("[^0-9]", "", $_GET['pid']);

这是我正在尝试更新的一些旧代码,因为不推荐使用 POSIX,但是我转换(使用 preg_replace)的努力没有成功。如果有人可以为我转换那条线,我将不胜感激。

从注释中添加代码

我的第一个猜测是

$pageid = preg_replace("/[^0-9]/","",$_GET['pid']; 

这给出了错误,所以我进一步将其减少到

$pageid = preg_replace("/^0-9/","",$_GET['pid'] 

原谅我,我对正则表达式的理解相当有限。

4

1 回答 1

2

让我们解释一下 posix 模式的作用。

[^0-9]

[是字符类的开始,]也是结束。当字符类以 a 开头时^,表示它是倒置的(= 匹配除所列内容之外的所有内容)。 0-9都是数字。

所以全局[^0-9]匹配所有不是数字的东西。

PCRE 中也可以使用相同的模式,因此这将起作用:

$page_id = preg_replace('/[^0-9]/', '', $_GET['pid']);

PCRE 有一些很好的表达方式。例如[0-9]可以替换为\d(d 代表数字)也\D(使用大写字母)是相反的,因此等价于[^0-9].

这导致以下情况:

$page_id = preg_replace('/\D/', '', $_GET['pid']);
于 2013-05-22T09:32:04.363 回答