ircmaxell/filterus

一个用于在PHP中过滤变量的库

1.0.0 2016-08-15 20:09 UTC

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 - 匹配URL
    • path - 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