-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46549
- shell命令
-
- 文章:(42)篇
- 阅读:154227
- Git教程
-
- 文章:(36)篇
- 阅读:234843
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131787
-
PHP函数filter_var的使用2018-06-23 12:41 阅读(6441) 评论(0)
一、概述
PHP中的filter_var和filter_var_array函数,主要是做来做验证的。提到这两个函数,就需要了解一下PHP的过滤器。如下:
There are two main types of filtering: validation and sanitization.
Validation is used to validate or check if the data meets certain qualifications. For example, passing in FILTER_VALIDATE_EMAIL will determine if the data is a valid email address, but will not change the data itself.
Sanitization will sanitize the data, so it may alter it by removing undesired characters. For example, passing in FILTER_SANITIZE_EMAIL will remove characters that are inappropriate for an email address to contain. That said, it does not validate the data.
即,php的过滤器主要有两种类型,一种是校正数据是否符合某种格式,这种类型不会修改原始数据;
另外一种是清理数据,以修改数据以符合某种格式,这种类型会修改数据。这些过滤器,都是PHP中定义好的一些常量,我们可以通过下面的方式,来获取常量的值:
php -r "print_r(FILTER_SANITIZE_SPECIAL_CHARS);" // 返回FILTER_SANITIZE_SPECIAL_CHARS过滤器对应的值,即过滤器的id
当然,通过过滤器的名字,调用int filter_id ( string $filtername ),也可以查看过滤器的id。
1、常用的验证过滤器(Validate filters)
过滤ID 名字
(Name)
选项
(option)
标志
(flags)
描述 FILTER_VALIDATE_BOOLEAN "boolean" "default" FILTER_NULL_ON_FAILURE 若为 "1", "true", "on" and "yes",则返回true;否则返回false。
如果设置了标识符FILTER_NULL_ON_FAILURE,"0", "false", "off", "no", and "",返回false,其他的返回NULL
FILTER_VALIDATE_DOMAIN validate_domain default FILTER_FLAG_HOSTNAME 验证域名 FILTER_VALIDATE_EMAIL validate_email default FILTER_FLAG_EMAIL_UNICODE 验证值是否为邮箱 FILTER_VALIDATE_FLOAT float default, decimal FILTER_FLAG_ALLOW_THOUSAND 把值作为浮点数来验证 FILTER_VALIDATE_INT int default, min_range, max_range FILTER_FLAG_ALLOW_OCTAL,
FILTER_FLAG_ALLOW_HEX
把纸作为整数 FILTER_VALIDATE_IP validate_ip default FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE 验证是否为有效的ip地址 FILTER_VALIDATE_MAC validate_mac_address default 验证当前值是否为mac地址 FILTER_VALIDATE_REGEXP validate_regexp default 验证是否为正在表达式 FILTER_VALIDATE_URL validate_url default FILTER_FLAG_SCHEME_REQUIRED, FILTER_FLAG_HOST_REQUIRED, FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED 验证是否为有效的url 2、常用的清理过滤器(Sanitize filters)
过滤ID 名字
(Name)
标志
(flags)
描述 FILTER_SANITIZE_EMAIL email 删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]
FILTER_SANITIZE_ENCODED encoded FILTER_FLAG_STRIP_LOW
, FILTER_FLAG_STRIP_HIGH,
FILTER_FLAG_STRIP_BACKTICK,
FILTER_FLAG_ENCODE_LOW,
FILTER_FLAG_ENCODE_HIGH
URL-encode 字符串,去除或编码特殊字符 FILTER_SANITIZE_MAGIC_QUOTES magic_quotes 应用 addslashes() FILTER_SANITIZE_NUMBER_FLOAT number_float FILTER_FLAG_ALLOW_FRACTION
, FILTER_FLAG_ALLOW_THOUSAND,
FILTER_FLAG_ALLOW_SCIENTIFIC
删除所有字符,除了数字、+- 以及 .,eE FILTER_SANITIZE_NUMBER_INT number_int 删除所有字符,除了数字和 +- FILTER_SANITIZE_SPECIAL_CHARS special_chars FILTER_FLAG_STRIP_LOW,
FILTER_FLAG_STRIP_HIGH,
FILTER_FLAG_STRIP_BACKTICK,
FILTER_FLAG_ENCODE_HIGH
HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符 3、如何查询所支持的过滤器列表呢
查询支持的过滤器列表,可以使用filter_list方法,如下:
array filter_list ( void )
返回值:返回一个所支持的过滤器的名称的列表,如果没有这样子的过滤器的话则返回空数组。这个数组的索引不是过滤器id, 你可以通过 filter_id() 去根据名称获取它们。
二、filter_var函数的使用
1、函数简介
filter_var,是使用特定的过滤器来过滤一个变量。函数定义如下:
mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
参数:
$variable 待过滤的变量,必须,如果不是字符串,PHP会自动依据转换规则,将其转为字符串。
$filter 过滤使用的过滤器ID,可选。
$option 一个选项的关联数组,或者按位区分的标示。如果过滤器接受选项,可以通过数组的 "flags" 位去提供这些标示。
返回值:如果通过验证,返回过滤后的数据,否则返回false。
2、案例
比如使用FILTER_VALIDATE_INT过滤器,验证是否为整数,如下:
$var = filter_var('12', FILTER_VALIDATE_INT); var_dump($var); // 通过验证,返回12 $var = filter_var('12a', FILTER_VALIDATE_INT); var_dump($var); // 验证失败,返回false
当然,我们还可以通过第三个参数,来设置整数的访问,以及默认的返回值。可以参考上面的验证过滤器规则,比如:
$options = array( 'options' => array( 'default' => 0, // 验证失败的返回值 'min_range' => 1, // 整数的最小值 'max_range' => 100 // 整数的最大值 ), 'flags' => FILTER_FLAG_ALLOW_OCTAL, ); $var = filter_var('5', FILTER_VALIDATE_INT, $options); var_dump($var);
要求验证的整数范围为1~100,如果验证失败,则返回0