过滤除数字之外的一切

时间:2012-02-25 21:40:04

标签: php get mysqli preg-replace urlvariables

我有一个获取url输入,我需要将其传递给数据库,但在此之前,因为我知道用户ID将始终是一个整数,我想过滤除了PHP中的所有数字。接下来的代码是我提出的,有没有人知道比这更好的方法?或者这是正确的方法吗?

$id = preg_replace('#[^0-9]#i', '', $_GET['id']);

3 个答案:

答案 0 :(得分:5)

没有

克拉(^)里面的意思是NOT。 I.E.不是0到9之间的字符。我们需要删除它。此外,i表示正则表达式不区分大小写;我们不需要担心,因为数字没有其他字符的情况。

我们需要选择我们想要保留的部分。支架用于此。第二个参数需要包含对我们要替换字符串的部分的引用(在存储到$id之前)。所以整个函数调用看起来像这样:

$id = preg_replace('#([0-9]+)#', '\1', $_GET['id']);

+只是意味着会有多个数字。

然后您可以使用is_int()来确保函数调用的结果实际上是INT,因为如果函数没有找到数字,它将只返回$_GET['id']的值。

$id = preg_replace('#([0-9]+)#', '\1', $_GET['id']);
if(is_int($id))
{
    //insert to DB
}

答案 1 :(得分:0)

如果您匹配数字,则不需要i选项。您的模式只匹配1位数字。我建议像

这样的东西
#[0-9]+# 

获取任意长度的数字,忽略其他任何内容。

答案 2 :(得分:0)

或者这个:

$id = preg_replace('/\D/', '', $_GET['id']);