我有一个获取url输入,我需要将其传递给数据库,但在此之前,因为我知道用户ID将始终是一个整数,我想过滤除了PHP中的所有数字。接下来的代码是我提出的,有没有人知道比这更好的方法?或者这是正确的方法吗?
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
答案 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']);