数据过滤器
优质
小牛编辑
135浏览
2023-12-01
我们提供了一个数据过滤器来对接收到的表单数据进行过滤。整个数据过滤分四步:
- 非空验证
- 数据类型验证
- 数据长度验证
- 数据净化
过滤器定义了一些验证规则的常量,供你组合使用,采用位运算的形式,如果要同时验证多个指标,请使用与运算(|), 例如: 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配置.