filter_var:比正则更方便的PHP域名、邮箱、IP、MAC地址验证过滤工具
filter_var 支持的几种验证类型:http://php.net/manual/zh/filter.filters.php
Validate filters 验证类
Sanitize filters 净化类
Filter flags 标志类
支持验证对象是否域名,IP,邮箱等,也可以过滤掉不符合要求的字符后返回
一、验证判断类型:验证并返回正确结果 (VALIDATE 类)
$str ='http://www.crazyken.cn';// http://www.crazyken.cn www.crazyken.cn 均可正常返回 $domain = filter_var($str,FILTER_VALIDATE_DOMAIN);//如果是域名标签长度正确则返回值 ,否则返回 false var_dump($domain); $str ='http://www.c..c.cn'; $domain = filter_var($str,FILTER_VALIDATE_DOMAIN);//如果是域名标签长度正确则返回值 ,否则返回 false var_dump($domain); //此方法无法验证以下情况 $str ='http://www.c@#$c.cn'; $domain = filter_var($str,FILTER_VALIDATE_DOMAIN);//如果是域名标签长度正确则返回值 ,否则返回 false var_dump($domain);
以上输出结果:
string(22) "http://www.crazyken.cn" bool(false) string(19) "http://www.c@#$c.cn"
以下情况无法正确识别出不合法
$str ='http://www.c@#$c.cn';//无法识别域名包含不允许字符 $str ='http://www.c.000';//无法识别域名后缀不合法 $str ='http://www.c.cn.';//无法识别以不允许字符为结尾的,如@#$
如果要验证多个,可以使用 filter_var_array($arr,FILTER_VALIDATE_DOMAIN)
二、过滤类型:过滤并返回过滤后的结果 (SANITIZE 类)
$str ='http://admin@www.a.cn'; $rs = filter_var($str,FILTER_SANITIZE_EMAIL);//过滤非邮箱字符后,返回结果 var_dump($rs);
以上返回结果为:string(18) "httpadmin@www.a.cn"
同样,要过滤多个,可以用 filter_var_array($arr,FILTER_SANITIZE_EMAIL),将返回过滤后的数组
-------------更多常用验证判断类型-------------
验证域名和网址: FILTER_VALIDATE_DOMAIN; (验证域名标签长度是否有效。根据RFC 1034,RFC 1035,RFC 952,RFC 1123,RFC 2732,RFC 2181和RFC 1123验证域名。可选标志FILTER_FLAG_HOSTNAME添加了专门验证主机名的功能(它们必须以字母字符开头并且仅包含字母数字或连字符)。) 附加参数: FILTER_FLAG_HOSTNAME (暂时没搞懂这个是什么用法)
验证电子邮件: FILTER_VALIDATE_EMAIL; 只返回布尔值用: FILTER_FLAG_EMAIL_UNICODE
浮点数字: FILTER_VALIDATE_FLOAT; 只返回布尔值用: FILTER_FLAG_ALLOW_THOUSAND
整数: FILTER_VALIDATE_INT; 只返回布尔值用: FILTER_FLAG_ALLOW_OCTAL,FILTER_FLAG_ALLOW_HEX
验证IP: FILTER_VALIDATE_IP; 只返回布尔值用: FILTER_FLAG_IPV4,FILTER_FLAG_IPV6,FILTER_FLAG_NO_PRIV_RANGE,FILTER_FLAG_NO_RES_RANGE
验证MAC地址: FILTER_VALIDATE_MAC;
正则表达式验证: FILTER_VALIDATE_REGEXP;
验证URL: FILTER_VALIDATE_URL; 只返回布尔值用:FILTER_FLAG_SCHEME_REQUIRED,FILTER_FLAG_HOST_REQUIRED,FILTER_FLAG_PATH_REQUIRED,FILTER_FLAG_QUERY_REQUIRED
-------------更多常用过滤类型-------------
电子邮件:FILTER_SANITIZE_EMAIL;作用:删除除字母,数字以外的所有字符!#$%&'* + - =?^ _` {|}〜@。[]。
URL编码:FILTER_SANITIZE_ENCODED;作用:URL编码字符串,可选地剥离或编码特殊字符。
对内容转义:FILTER_SANITIZE_MAGIC_QUOTES;作用:和 addslashes()差不多。
浮点数字:FILTER_SANITIZE_NUMBER_FLOAT;作用:删除除数字,+ - 和指定选项之外的所有字符。
整数:FILTER_SANITIZE_NUMBER_INT;作用:删除除数字,加号和减号以外的所有字符。
特殊字符:FILTER_SANITIZE_SPECIAL_CHARS;作用:删除HTML-escape'“<>&和ASCII值小于32的字符,可配置要剥离的或编码其他特殊字符。
full_special_chars:FILTER_SANITIZE_FULL_SPECIAL_CHARS;作用:相当于使用ENT_QUOTES设置调用htmlspecialchars()。可以通过设置FILTER_FLAG_NO_ENCODE_QUOTES来禁用编码引号。与htmlspecialchars()一样,此过滤器知道default_charset,如果检测到在当前字符集中构成无效字符的字节序列,则拒绝整个字符串,从而产生0长度的字符串。将此过滤器用作默认过滤器时,请参阅下面有关将默认标志设置为0的警告。
字符串:FILTER_SANITIZE_STRING;作用:剥离标签,可选择剥离或编码特殊字符。
网址:FILTER_SANITIZE_URL;作用:删除除字母,数字和$ -_之外的所有字符。+!*'(),{} | \\ ^〜[]`<>#%“; /?:@&=。
未列出只返回布尔值的选项,请自行前往PHP网站页面查询。
-------------更多常用过滤类型示例-------------
<?php $int_ops=array( 'options'=>array( 'default'=>5, 'min_range'=>5 ), 'flags'=>FILTER_FLAG_ALLOW_OCTAL ); $float_ops=array( 'options'=>array( 'decimal'=>'%') ); $regex_ops=array( 'options'=>array( 'regexp'=>"#[a-z]#") ); $url_ops=array( 'flags'=>FILTER_FLAG_PATH_REQUIRED|FILTER_FLAG_QUERY_REQUIRED ); $domain_ops=array( 'flags'=>FILTER_FLAG_HOSTNAME ); var_dump(filter_var('1',FILTER_VALIDATE_INT,$int_ops)); var_dump(filter_var('011',FILTER_VALIDATE_INT,$int_ops)); var_dump(filter_var('011',FILTER_VALIDATE_BOOLEAN)); var_dump(filter_var('1',FILTER_VALIDATE_BOOLEAN)); var_dump(filter_var('11,231%23',FILTER_VALIDATE_FLOAT,$float_ops)); var_dump(filter_var('1.23',FILTER_VALIDATE_FLOAT,$float_ops)); var_dump(filter_var('abaxs',FILTER_VALIDATE_REGEXP,$regex_ops)); var_dump(filter_var('http://a/s?z',FILTER_VALIDATE_URL,$url_ops)); var_dump(filter_var('http://a/s',FILTER_VALIDATE_URL,$url_ops)); var_dump(filter_var('a@b.com',FILTER_VALIDATE_EMAIL)); var_dump(filter_var('a@b',FILTER_VALIDATE_EMAIL)); var_dump(filter_var('256.233.445.55',FILTER_VALIDATE_IP)); var_dump(filter_var('192.168.0.1',FILTER_VALIDATE_IP)); var_dump(filter_var('5C-26-0A-7F-0C-E0',FILTER_VALIDATE_MAC)); var_dump(filter_var('local12123',FILTER_VALIDATE_DOMAIN,$domain_ops)); ?>