filter_var:比正则更方便的PHP域名、邮箱、IP、MAC地址验证过滤工具

filter_var 支持的几种验证类型:http://php.net/manual/zh/filter.filters.php 


支持验证对象是否域名,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));
?>