高级过滤器
检测一个数字是否在一个范围内
使用filter_var()函数来检测一个int型的变量是否在1到200内:1
2
3
4
5
6
7
8
9
10
$int = 122;
$min = 1;
$max = 200;
if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {
echo("变量值不在合法范围内");
} else {
echo("变量值在合法范围内");
}
运行结果1
变量值在合法范围内
这个地方使用了FILTER_VALIDATE_INT,这个过滤器把值作为整数来验证
还可以添加选项和标志
- min_range 规定最小整数
- max_range 规定最大整数
- FILTER_FLAG_ALLOW_OCTAL 允许八进制
- FILTER_FLAG_ALLOW_HEX 允许十六进制
当在数组中规定选项时,选项必须存入一个名为 “options” 的关联多维数组中
具体使用方法看实例
检测IPV6地址
依旧是使用filter_var()函数来检测$ip变量是否为IPV6地址1
2
3
4
5
6
7
8<?php
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
echo("$ip 是一个 IPv6 地址");
} else {
echo("$ip 不是一个 IPv6 地址");
}
运行结果1
2001:0db8:85a3:08d3:1319:8a2e:0370:7334 是一个 IPv6 地址
FILTER_VALIDATE_IP 过滤器把值作为 IP 进行验证
选项有
- FILTER_FLAG_IPV4 - 要求值是合法的 IPv4 IP
- FILTER_FLAG_IPV6 - 要求值是合法的 IPv6 IP
- FILTER_FLAG_NO_PRIV_RANGE - 要求值是 RFC 指定的私域 IP
- FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 范围内
检测URL
1 | <?php |
运行结果1
http://www.runoob.com 不是一个合法的 URL
FILTER_VALIDATE_URL 过滤器把值作为 URL 来验证
标志
- FILTER_FLAG_SCHEME_REQUIRED - 要求 URL 是 RFC 兼容 URL(比如 http://example)
- FILTER_FLAG_HOST_REQUIRED - 要求 URL 包含主机名(比如 http://www.example.com)
- FILTER_FLAG_PATH_REQUIRED - 要求 URL 在域名后存在路径(比如 www.example.com/example1/test2/)
- FILTER_FLAG_QUERY_REQUIRED - 要求 URL 存在查询字符串(比如 “example.php?name=Peter&age=37”)
移除ASCII大于127的字符
1 |
|
运行结果1
Hello World!
FILTER_SANITIZE_STRING 过滤器去除或编码不需要的字符。
该过滤器删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符
- FILTER_FLAG_NO_ENCODE_QUOTES - 该标志不编码引号
- FILTER_FLAG_STRIP_LOW - 去除 ASCII 值在 32 以下的字符
- FILTER_FLAG_STRIP_HIGH - 去除 ASCII 值在 127 以上的字符
- FILTER_FLAG_ENCODE_LOW - 编码 ASCII 值在 32 以下的字符
- FILTER_FLAG_ENCODE_HIGH - 编码 ASCII 值在 127 以上的字符
- FILTER_FLAG_ENCODE_AMP - 把 & 字符编码为 &
更多过滤器请参考
https://www.runoob.com/php/php-ref-filter.html
总结
1.涉及到过滤都使用filter_var()函数
2.结合简单过滤器和选项可以做到很多操作
3.在使用FILTER_VALIDATE_INT时,想要使用数组来作为选项,数组名必须为options