0

我有一个获取 url 输入,我需要将它传递到数据库中,但在这样做之前,因为我知道用户 ID 总是一个整数,所以我想过滤掉除 php 中的数字之外的所有内容。以下代码是我想出的,有没有人知道比这更好的方法?或者这是正确的方法?

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

3 回答 3

5

不。

里面的克拉 ( ^) 表示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
}
于 2012-02-25T21:50:05.063 回答
0

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

#[0-9]+# 

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

于 2012-02-25T21:44:15.413 回答
0

或这个:

$id = preg_replace('/\D/', '', $_GET['id']);
于 2012-02-25T21:45:15.957 回答