数据过滤器

优质
小牛编辑
135浏览
2023-12-01

我们提供了一个数据过滤器来对接收到的表单数据进行过滤。整个数据过滤分四步:

  1. 非空验证
  2. 数据类型验证
  3. 数据长度验证
  4. 数据净化

过滤器定义了一些验证规则的常量,供你组合使用,采用位运算的形式,如果要同时验证多个指标,请使用与运算(|), 例如: DFILTER_STRING|DFILTER_SANITIZE_TRIM. 表示数据必须是字符串并对字符串进行去空格操作。

数据类型验证选项值

选项名称选项说明
DFILTER_LATIN简单字符类型
DFILTER_URL验证是否一个合法的url
DFILTER_EMAIL验证是否一个合法的邮箱地址
DFILTER_NUMERIC验证是否是数字
DFILTER_STRING验证是否是字符串
DFILTER_MOBILE验证是否是一个合法的手机号码
DFILTER_TEL验证是否是一个座机号码
DFILTER_IDENTIRY验证是否是一个合法的身份证
DFILTER_REGEXP使用自定义的正则表达式验证
DFILTER_ZIP验证是否是一个合法的邮编

数据净化验证选项值

选项名称选项说明
DFILTER_SANITIZE_TRIM去空格
DFILTER_SANITIZE_SCRIPT去除javascript脚本
DFILTER_SANITIZE_HTML去除html标签
DFILTER_MAGIC_QUOTES去除sql注入
DFILTER_SANITIZE_INT强制转换为整数
DFILTER_SANITIZE_FLOAT强制转为浮点数

举个完整的栗子

$filterMap = array(
    'title' => array(Filter::DFILTER_STRING, array(6, 12), Filter::DFILTER_SANITIZE_TRIM,
        array("require" => "标题不能为空.", "length" => "标题长度必需在6-12之间.")),
    'email' => array(Filter::DFILTER_EMAIL, NULL, NULL,
        array("type" => "请输入正确的邮箱地址")),
    'mobile' => array(Filter::DFILTER_MOBILE, NULL, NULL,
        array("type" => "请输入正确的手机号码")),
    'id_number' => array(Filter::DFILTER_IDENTIRY, NULL, NULL,
        array('type' => '请输入正确的身份证号码')),
    'content' => array(Filter::DFILTER_STRING, NULL, Filter::DFILTER_MAGIC_QUOTES|Filter::DFILTER_SANITIZE_HTML,
        array("require" => "文章内容不能为空."))
);

$data = array(
    'title' => 'xiaoyang333',
    'email' => '906388445@qq.com',
    'mobile' => '185456701250',
    'id_number' => '431028198911210833',
    'content' => "<span>我有一头'小毛驴'。</span>"
);

$data = Filter::loadFromModel($data, $filterMap, $error);
__print($data); //过滤后的数据,如果数据验证失败,则返回false
__print($error); //错误信息

其中 $filterMap 是数据验证和过滤的规则配置,它是一个 key => value 的数组, key 是指 要过滤数据的表单 name ,value 也是一个数组,有4个元素

数组元素数据类型说明
$arr[0]int数据类型配置, 如果为null则不做数据类型验证,
配置参数说明参考数据类型验证选项值
$arr[1]array数据长度配置,如果$arr[0] 是 DFILTER_NUMERIC(数字),
则$arr[1] 就是表示这个数字的大小范围
$arr[2]int数据净化配置,如果为null则不做净化。
配置参数说明参考 数据净化验证选项值
$arr[3]array报错文本配置,当验证失败时返回的信息。是一个 key => value 数组
详情查看 报错信息

报错信息

key说明
require非空验证报错信息
type数据类型和数据净化报错信息
length数据长度验证报错信息

举个栗子


$filterMap = array(
    'title' => array(Filter::DFILTER_STRING, array(6, 12), Filter::DFILTER_SANITIZE_TRIM,
        array("require" => "标题不能为空.", "length" => "标题长度必需在6-12之间.")),
    'email' => array(Filter::DFILTER_EMAIL, NULL, NULL,
        array("type" => "请输入正确的邮箱地址")),
    'mobile' => array(Filter::DFILTER_MOBILE, NULL, NULL,
        array("type" => "请输入正确的手机号码")),
    'id_number' => array(Filter::DFILTER_IDENTIRY, NULL, NULL,
        array('type' => '请输入正确的身份证号码')),
    'content' => array(Filter::DFILTER_STRING, NULL, Filter::DFILTER_MAGIC_QUOTES|Filter::DFILTER_SANITIZE_HTML,
        array("require" => "文章内容不能为空."))
);

$data = array(
    'title' => 'xiaoyang333',
    'email' => '906388445@qq.com',
    'mobile' => '185456701250',
    'id_number' => '431028198801210838',
    'content' => "<span>我有一头'小毛驴'。</span>"
);

$data = Filter::loadFromModel($data, $filterMap, $error);
__print($data);
__print($error);
die();

输出结果: bool(false) 请输入正确的手机号码

框架应用

数据过滤器我们在框架中一般配置在 Model 中,具体怎么配置请参考 Model配置.