我有一个获取 url 输入,我需要将它传递到数据库中,但在这样做之前,因为我知道用户 ID 总是一个整数,所以我想过滤掉除 php 中的数字之外的所有内容。以下代码是我想出的,有没有人知道比这更好的方法?或者这是正确的方法?
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
我有一个获取 url 输入,我需要将它传递到数据库中,但在这样做之前,因为我知道用户 ID 总是一个整数,所以我想过滤掉除 php 中的数字之外的所有内容。以下代码是我想出的,有没有人知道比这更好的方法?或者这是正确的方法?
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
不。
里面的克拉 ( ^
) 表示NOT
. IE 不是介于 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
}
如果您匹配数字,则不需要 i 选项。您的模式将仅匹配 1 个数字。我建议像
#[0-9]+#
获取任意长度的数字,忽略其他任何内容。
或这个:
$id = preg_replace('/\D/', '', $_GET['id']);