ircmaxell / filterus
一个用于在PHP中过滤变量的库
1.0.0
2016-08-15 20:09 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: ^5
This package is auto-updated.
Last update: 2024-09-20 01:06:35 UTC
README
过滤方法
每个过滤类有两个主要方法
$filter->filter($var)- 返回一个经过过滤的$var版本,符合选项。如果无法安全修改,则返回默认值。$filter->validate($var)- 返回一个布尔值,表示值是否有效。
简单过滤器(带选项)
alnum- 字母数字min- 0 - 最小长度max- PHP_INT_MAX - 最大长度default-''- 默认返回值
array- 数组匹配min- 0 - 最小大小maximum- PHP_INT_MAX - 最大大小keys-null- 过滤要运行的键values-null- 过滤要运行在值上default-array()- 默认返回值
bool- 布尔匹配default-null- 默认返回值
email- 匹配电子邮件float- 浮点数min-null- 最小长度max-null- 最大长度default- 0.0 - 默认返回值
int- 整数min-null- 最小长度max-null- 最大长度default- 0 - 默认返回值
ip- 匹配IP地址ipv4-true- 布尔值以匹配IPv4地址ipv6-true- 布尔值以匹配IPv6地址private-true- 包含私有地址?reserved-true- 包含保留地址?
object- 对象class-''- 必要的类或接口名称default-null- 默认值defaultFactory-null- 一个回调以实例化返回值
raw- 返回传入的内容regex- 通过正则表达式匹配字符串min- 0 - 最小长度max- PHP_INT_MAX - 最大长度default-''- 默认返回值regex-/.?/- 要运行的正则表达式
string- 匹配字符串min- 0 - 最小长度max- PHP_INT_MAX - 最大长度default-''- 默认返回值
url- 匹配URLpath-false- 强制存在路径query-false- 强制存在查询字符串
复杂过滤器
Filter::map(array())- "映射"多个过滤到键值对上。对于过滤关联数组或stdclass对象很有用。Filter::chain($filter1, $filter2...)- 将多个过滤器链接在一起,对相同的值进行运行(类似于用AND连接的过滤器)。Filter::pool($filter1, $filter2...)- 使用第一个有效的返回值运行相同值通过多个过滤器(类似于用OR连接的过滤器)。
用法
可以使用逗号分隔的值列表指定简单过滤器。因此,指定最小长度为5的字符串的过滤器可以表示为
$filter = Filter::factory('string,min:5');
或者
$filter = new Filters\String(array('min' => 5));
如果你将过滤器传递给 Filter::factory(),它将保持不变。因此,你可以编写如下函数
function foo($bar, $filter) { // do something with $bar and set in $baz return Filter::factory($filter)->filter($baz); }
也可以支持复杂链接。所以,如果你想检查一个大小至少为4的数组,具有数字键,并且包含最小长度为5的字符串,可以这样构建
$filter = Filter::array('min:4', 'int', 'string,min:5');
如果我们想验证一个关联数组,我们会使用一个"map"过滤器
$array = array( 'foo' => 2, 'bar' => 'test', ); $filter = Filter::map(array( 'foo' => 'int', 'bar' => 'string,min:4', )); var_dump($filter->validate($array)); // true
过程式接口
Filterus还提供了一种过程式接口来调用过滤器。
\Filterus\filter($var, $filter);
并且
\Filterus\validate($var, $filter);
任何过滤器都受支持(两者基本上都是简单的包装器)
function \Filterus\filter($var, $filter) { return \Filterus\Filter::factory($filter)->filter($var); }
这两个都只是方便函数。
安全漏洞
如果您发现了一个安全问题,请直接联系作者:me@ircmaxell.com。