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。