文章目录

  • 1、 使用一个例子介绍
    • 1》 html页面显示
      • test_1.html页面代码
    • 2》html页面提交的数据
    • 3》php校验函数
      • test_1.php校验代码
    • 4》校验结果
  • 2、名称、地址、掩码、日期、时间、端口等校验
    • 1》页面显示
      • index.html页面代码
    • 2》php校验函数
      • test.php校验代码
  • 3、函数使用小技巧--快速了解如何使用

1、 使用一个例子介绍

先用一个小例子介绍一下此函数怎么使用

 整数的正则校验是`'/^[0-9]*$/'`

1》 html页面显示

test_1.html页面代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form name="test" id="test" action="./test_1.php" method="post" placehold="name">必须输入数字:<input type="text" name="number" id="age" value="" placeholder="请输入一个数字"><br/><input type="submit" value="确定">
</form>
</body>
</html>

2》html页面提交的数据

3》php校验函数

test_1.php校验代码

<?php
//验证类别
define("VALIDATE_EMPTY","1");       //验证为空
define("VALIDATE_INT_RANGE","2");           //验证整数
define("VALIDATE_REG","3");         //验证正则
define("VALIDATE_MASK","4");            //验证正则
define("VALIDATE_FUNCTION","5");            //验证函数
define("VALIDATE_SELECT","6");              //验证select
//正则表达式
define("PHP_REG_VALIDATE_INT",'/^[0-9]*$/');class ValidateCommit
{public static function validate($validate_url, $validate_reg){   //头上没有加验证参数配置,默认为TRUEif(!is_array($validate_reg)) {return true;}//验证结果$validate_ret = true;self::v($validate_reg,$validate_ret);if($validate_ret === false) {self::out($validate_url,$validate_ret);}}private function out($validate_url,$validate_ret) {echo "DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__." 校验结果:".var_export($validate_ret, true)."<br/>";exit;}/*** 获取页面提交的数据,以及校验标准;对提交的数据进行拆分提交,按照标准进行校验** @param [type] $validate_reg  校验的标准,*          即 array(2) { ["age"]=> array(2) { ["type"]=> int(0) *                        ["val"]=> array(4) { [0]=> string(3) "1|2" [1]=> string(16) "/^[0-9]\d{0,2}$/" [2]=> int(1) [3]=> int(255) } } * @param [type] $validate_ret  返回值* @return void*/private function v($validate_reg,&$validate_ret) {echo "<br/><br/>"."DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__."<br/>";if($validate_ret === true && is_array($validate_reg)) {foreach($validate_reg as $k=>$v) {                  //此时的key是post内的值echo "<br/><br/>******DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__." 开始校验:".var_export($k, true)."<br/>";if(array_key_exists("sel_val",$v)) {     //级联的验证$tk = "sel_".$v["sel_val"];if(is_array($v[$tk])) {self::v($v[$tk],$validate_ret);}} else {                                  //单次验证$validate_vaule = $_POST[$k];               //post后的值赋值给 validate_valueif(array_key_exists('type',$v)) {if($v['type'] == 1) {$validate_vaule = $_GET[$k];        //若type的值是1,则获取get值,赋值给 validate_value} else if($v['type'] == 2) {            $validate_vaule = $_REQUEST[$k];    //若type的值是2,则获取request值,赋值给 validate_value}}/*** "radio_one"=>array(* "type"=>0,* "mutiple_val"=>array("0"=>array('1|2'),"1"=>array('1|2'))*)*/if(is_array($validate_vaule)) {                     //若提交过来的值是数组var_dump("11111111111111111111提交过来的值是数组");if(array_key_exists('mutiple_val',$v)) { //不同方式检测foreach($v['mutiple_val'] as $sub_k => $sub_v) {$val = $validate_vaule[$sub_k];$tarr = explode("|",$sub_v[0]);$validate_flag = 0;foreach($tarr as $tv) {$validate_ret = self::vone($tv,$val,$sub_v);if($validate_ret === false) {$validate_flag = 1;break;}}if($validate_flag = 1) break;}} else if(array_key_exists('val',$v)) { //全部一种方式检测$tarr = explode("|",$v['val'][0]);foreach($tarr as $tv) {$validate_flag = 0;foreach($validate_vaule as $key => $val) {$validate_ret = self::vone($tv,$val,$v['val']);if($validate_ret === false) {$validate_flag = 1;break;}}if($validate_flag) {break;}}}} else {                                       //若提交过来的值不是数组//$valicheck['ipaddr_str']=array("type"=>0,"val"=>array('1|5','checkValidateAreaIp'));var_dump("222222222222222222222222222222222222若提交过来的值不是数组");$tarr = explode("|",$v['val'][0]);foreach($tarr as $tv) {$validate_ret = self::vone($tv,$validate_vaule,$v['val']);if($validate_ret === false) {break;}else{echo "DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__." 校验结果:".var_export($validate_ret, true)."<br/>";}}}}if($validate_ret === false) {break;}}}return $validate_ret;}/*** 判断参数的合法性* array(1) { ["age"]=> array(2) { ["type"]=> int(0) ["val"]=> array(4) { [0]=> string(3) "1|2" [1]=> string(16) "/^[0-9]\d{0,2}$/" [2]=> int(1) [3]=> int(255) } } } * * 根据arr["val"][0]; 在arr["val"][1]、arr["val"][2]、arr["val"][3] 规则下,判断提交的值的合法性    即:string(1) "1"* @param [type] $vtype     arr["val"][0]的值、一次只传入1个,在传入前对其按照|进行了分割            即:string(2) "25" * @param [type] $val       post/get/request提交的值* @param [type] $reg       arr["val"]     即:array(4) { [0]=> string(3) "1|2" [1]=> string(16) "/^[0-9]\d{0,2}$/" [2]=> int(1) [3]=> int(255) } * @return void*/private function vone($vtype,$val,$reg) {echo "<br/>"."DEBUG-- File:".__FILE__." Fun:".__FUNCTION__.", Line:".__LINE__."<br/>校验类型:".$vtype." 被校验的值:".$val." 校验规则:".var_export($reg, true)."<br/>";switch ($vtype) {case VALIDATE_EMPTY:                    //1:不为空,但可以为0if(empty($val) && $val !=0) {return false;}break;case VALIDATE_INT_RANGE:                //2:正则匹配$reg[1]; $reg[2]<=$val<=$reg[3]if (!(preg_match($reg[1], $val) && $val >= $reg[2] && $val <= $reg[3])) {return false;}break;case VALIDATE_REG:                      //3:正则匹配$reg[1]if (!preg_match($reg[1], $val)) {return false;}break;case VALIDATE_MASK:                     //4:正则匹配$reg[1]; 正则匹配$reg[2];if (!(preg_match($reg[1], $val) || preg_match($reg[2], $val))) {return false;}break;case VALIDATE_FUNCTION:                //5:函数校验     if($reg[1]=='checkValidatePwdChk'){if (!($reg[1]($val,$reg[2],$reg[3]))) {return false;}}else{if (!($reg[1]($val))) { //$reg[1]为函数名,$val为校验准则return false;}}break;case VALIDATE_SELECT:                   //6:函数校验if (!(checkValidateSelectIn($val,$reg[1]))) {return false;}break;default:break;}return true;}}echo "<br/>"."DEBUG-- File:".__FILE__.", Line:".__LINE__."  POST/GET/REQUEST的所有数据如下:<br/>";
var_dump($_POST);echo "<br/>";
/**type为0: post值* type为1: get值* type为2: request值*///type:0-->post类型的number参数;  val的array 3-->$_POST['number']的值符合ipv4格式;                                                  [3:正则,单次匹配]
$valicheck['number']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_INT));
ValidateCommit::validate("index.html",$valicheck);?>

4》校验结果

2、名称、地址、掩码、日期、时间、端口等校验

//地址匹配:1.1.1.1(仅仅)
define("PHP_REG_VALIDATE_IP",'/^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))$/');
define("PHP_REG_VALIDATE_IP_1",'/^(((\d{1})|(\d{2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))\.){3}((\d{1})|(\d{2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))$/');
//地址匹配:192.168.1.1/24
define("PHP_REG_VALIDATE_IP_INTMASK",'/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/([0-9]|1\d|2\d|3[0-2])$/');
//地址匹配:192.168.1.1/255.255.255.0
define("PHP_REG_VALIDATE_IP_IPMASK",'/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/((254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0))$/');
//ipv6地址匹配: ::~ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 不支持2006:19/64 不支持2006:9-2006::19
define("PHP_REG_VALIDATE_IPV6",'/^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$/');
//掩码匹配:255.255.255.0 类型的掩码
define("PHP_REG_VALIDATE_MASK",'/^(254|252|248|240|224|192|128|0)\.0\.0\.0$|^(255\.(254|252|248|240|224|192|128|0)\.0\.0)$|^(255\.255\.(254|252|248|240|224|192|128|0)\.0)$|^(255\.255\.255\.(254|252|248|240|224|192|128|0))$/');
//掩码匹配:0~32 掩码
define("PHP_REG_VALIDATE_MASKINT",'/^([0-9]|1[0-9]|2[0-9]|3[0-2])$/');
//端口匹配:0<port<=65535
define("PHP_REG_VALIDATE_PORT",'/^([1-9]\d{0,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/');
//端口匹配:0<=port<=65535
define("PHP_REG_VALIDATE_PORT_ZERO",'/^(\d{0,4}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/');
//日期匹配: 2016-2-16前面的0可以不写
define("PHP_REG_VALIDATE_DATE",'/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/');
//日期匹配: 2016-02-16前面的0必须写
define("PHP_REG_VALIDATE_DATE_ZERO",'/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/');
//时间匹配: 00:00|23:59|10:10   不匹配:24:00|00:60|25:61
define("PHP_REG_VALIDATE_TIME",'/^(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])$/');
//日期+时间匹配: 2016-02-16 23:59:59 前面的0必须写
define("PHP_REG_VALIDATE_DATETIME_ZERO",'/^\d{4}[\-](0[1-9]|1[012])[\-](0[1-9]|[12][0-9]|3[01])(\s+(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|[1-5][0-9])\:(0[0-9]|[1-5][0-9]))$/');
define("PHP_REG_VALIDATE_DATETIME_ZERO_1",'/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/');
//日期+时间匹配: 2016-2-16 或者 2016-02-16 23:59:59 前面的0可以不写
define("PHP_REG_VALIDATE_DATETIME",'/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])(\s+(0?[0-9]|1[0-9]|2[0-3])\:(0?[0-9]|[1-5][0-9])\:(0?[0-9]|[1-5][0-9]))?$/');
//mac地址匹配: 匹配ff:ff:ff:ff:ff:ff
define("PHP_REG_VALIDATE_MAC",'/^([0-9a-fA-F]{2})(([\s:][0-9a-fA-F]{2}){5})$/');

1》页面显示

index.html页面代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style type="text/css">input {width: 1000px;}</style>
</head>
<body>
<form name="test" id="test" action="./test.php" method="post" placehold="name">年龄:<input type="number" name="age" id="age" value="" placeholder="例如:1~255"><br/>IPV4:<input type="text" name="ipv4" id="ipv4" value="" placeholder="例如:1.1.11.1"><br/> IPV4_1:<input type="text" name="ipv4_1" id="ipv4_1" value="" placeholder="例如:192.168.1.1/24"><br/>    IPV4_2:<input type="text" name="ipv4_2" id="ipv4_2" value="" placeholder="例如:192.168.1.1/255.255.255.0"><br/>掩码:<input type="text" name="mask" id="mask" value="" placeholder="例如:255.255.255.0"><br/>    掩码_1:<input type="text" name="mask_1" id="mask_1" value="" placeholder="例如:0~32"><br/>    IPV6:<input type="text" name="ipv6" id="ipv6" value="" placeholder="例如:  ::~ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"><br/>IPV4/6:<input type="text" name="ipv4-6" id="ipv4-6" value="" placeholder="例如: 1.1.11.1 或 ::~ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"><br/>mac:<input type="text" name="mac" id="mac" value="" placeholder="例如: ff:ff:ff:ff:ff:ff"><br/>端口:<input type="number" name="port" id="port" value="" placeholder="例如:0<port<=65535"><br/>端口_1:<input type="number" name="port_1" id="port_1" value="" placeholder="例如:0<=port<=65535"><br/>日期:<input type="text" name="date" id="date" value="" placeholder="例如:2016-2-16前面的0可以不写 不匹配:2016-02-16 23:59:59"><br/>日期_1:<input type="text" name="date_1" id="date_1" value="" placeholder="例如:2016-02-16前面的0必须写"><br/>时间:<input type="text" name="time" id="time" value="" placeholder="例如:00:00|23:59|10:10   不匹配:24:00|00:60|25:61"><br/>日期+时间:<input type="text" name="datetime" id="datetime" value="" placeholder="例如:2016-02-16 23:59:59 前面的0必须写"><br/>日期+时间_1:<input type="text" name="datetime_1" id="datetime_1" value="" placeholder="例如:00:00|23:59|10:10   2016-2-16 或者 2016-02-16 23:59:59 前面的0可以不写"><br/>密码:<input type="password" name="password" id="password" value="" placeholder="数字、字母、特殊字符(~!@#$%^&*-+,.;|><)中的两者,且大于等于8位小于等于10位"><br/>名称:<input type="text" name="name" id="name" value="" placeholder="字符串可为空;不为空时,由字母、数字、下划线、中划线、点和中文组成,1-31个字符,且不能以NMC_ 开头"><br/>字符串在数组内:<input type="text" name="select" id="select" value="" placeholder="输入的字符串为 'aaa','bbb','ccc'"><br /><!--男/女:<input type="radio" checked="checked" name="radio_one" value="666"><input type="radio" name="radio_one" value="777"><br/><br/>-->  <!--怎么能传入数组-->ipv4Area:<textarea rows="5" cols="50" name="ipv4area" placeholder="空或All或者1.1.1.1\r1.1.1.1-5.5.5.5\r192.168.1.10/24\r192.168.1.20/255.255.255.0"></textarea><br/>ipv4Area_1:<textarea rows="5" cols="50" name="ipv4area_1" placeholder="空或All或者1.1.1.1\r1.1.1.1-5.5.5.5 不匹配192.168.1.10/24\r192.168.1.20/255.255.255.0"></textarea><br/>   ipv4Area_2:<textarea rows="5" cols="50" name="ipv4area_2" placeholder="空或All或者1.1.1.1/24\r1.1.1.1/255.255.255.0  不匹配1.1.1.1\r1.1.1.1-5.5.5.5"></textarea><br/>   ipv6Area:<textarea rows="5" cols="50" name="ipv6area" placeholder="空或All或者2006::19\r\n2006::9-2006::19\r\n2006:19/64"></textarea><br/>  mac地址:<textarea rows="6" cols="50" name="macarea" placeholder="空或00:23:24:5D:58:71 不匹配ff:ff:ff:ff:ff:ff"></textarea><br/> <!--00:23:24:5D:58:71-->端口area:<textarea rows="6" cols="50" name="portarea" placeholder="空或0<port<=65535"></textarea><br/> <!--1-65535之间的数字-->tcp/udp端口:<textarea rows="6" cols="50" name="port_area" name="port_area" id="port"  value="" placeholder="一行一组端口, 格式说明:
80 表示目的端口为 80 的服务
81-90 表示目的端口范围为 81-90 的服务
222/333 表示源端口为 222, 目的端口为 333 的服务
100-200/80-90 表示源端口范围为 100-200, 目的端口范围为 80-90 的服务 "></textarea><br/>ip端口:<textarea rows="6" cols="50" name="ipPort" id="ipPort" value="" placeholder="0~255"></textarea><br/><input type="submit" value="确定">
</form>
</body>
</html>

2》php校验函数

test.php校验代码

<?php
//验证类别
define("VALIDATE_EMPTY","1");       //验证为空
define("VALIDATE_INT_RANGE","2");           //验证整数
define("VALIDATE_REG","3");         //验证正则
define("VALIDATE_MASK","4");            //验证正则
define("VALIDATE_FUNCTION","5");            //验证函数
define("VALIDATE_SELECT","6");              //验证select
//正则表达式//地址匹配:1.1.1.1(仅仅)
define("PHP_REG_VALIDATE_IP",'/^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))$/');
define("PHP_REG_VALIDATE_IP_1",'/^(((\d{1})|(\d{2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))\.){3}((\d{1})|(\d{2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))$/');
//地址匹配:192.168.1.1/24
define("PHP_REG_VALIDATE_IP_INTMASK",'/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/([0-9]|1\d|2\d|3[0-2])$/');
//地址匹配:192.168.1.1/255.255.255.0
define("PHP_REG_VALIDATE_IP_IPMASK",'/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/((254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0))$/');
//ipv6地址匹配: ::~ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 不支持2006:19/64 不支持2006:9-2006::19
define("PHP_REG_VALIDATE_IPV6",'/^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$/');
//掩码匹配:255.255.255.0 类型的掩码
define("PHP_REG_VALIDATE_MASK",'/^(254|252|248|240|224|192|128|0)\.0\.0\.0$|^(255\.(254|252|248|240|224|192|128|0)\.0\.0)$|^(255\.255\.(254|252|248|240|224|192|128|0)\.0)$|^(255\.255\.255\.(254|252|248|240|224|192|128|0))$/');
//掩码匹配:0~32 掩码
define("PHP_REG_VALIDATE_MASKINT",'/^([0-9]|1[0-9]|2[0-9]|3[0-2])$/');
//端口匹配:0<port<=65535
define("PHP_REG_VALIDATE_PORT",'/^([1-9]\d{0,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/');
//端口匹配:0<=port<=65535
define("PHP_REG_VALIDATE_PORT_ZERO",'/^(\d{0,4}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/');
//日期匹配: 2016-2-16前面的0可以不写
define("PHP_REG_VALIDATE_DATE",'/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/');
//日期匹配: 2016-02-16前面的0必须写
define("PHP_REG_VALIDATE_DATE_ZERO",'/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/');
//时间匹配: 00:00|23:59|10:10   不匹配:24:00|00:60|25:61
define("PHP_REG_VALIDATE_TIME",'/^(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])$/');
//日期+时间匹配: 2016-02-16 23:59:59 前面的0必须写
define("PHP_REG_VALIDATE_DATETIME_ZERO",'/^\d{4}[\-](0[1-9]|1[012])[\-](0[1-9]|[12][0-9]|3[01])(\s+(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|[1-5][0-9])\:(0[0-9]|[1-5][0-9]))$/');
define("PHP_REG_VALIDATE_DATETIME_ZERO_1",'/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/');
//日期+时间匹配: 2016-2-16 或者 2016-02-16 23:59:59 前面的0可以不写
define("PHP_REG_VALIDATE_DATETIME",'/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])(\s+(0?[0-9]|1[0-9]|2[0-3])\:(0?[0-9]|[1-5][0-9])\:(0?[0-9]|[1-5][0-9]))?$/');
//mac地址匹配: 匹配ff:ff:ff:ff:ff:ff
define("PHP_REG_VALIDATE_MAC",'/^([0-9a-fA-F]{2})(([\s:][0-9a-fA-F]{2}){5})$/');/***************************没试过--开始************************************/
define("PHP_REG_VALIDATE_EMAIL",'/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/');
define("PHP_REG_VALIDATE_PWD",'/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d~!@#$%^*-+,.;|><]+.{8,}$/');
define("PHP_REG_VALIDATE_INT",'/^[0-9]*$/');
define("PHP_REG_VALIDATE_PHONE",'/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/');
define("PHP_REG_VALIDATE_longitude",'/^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/');
define("PHP_REG_VALIDATE_latitude",'/^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/');
define("PHP_REG_VALIDATE_DNS",'/^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?$/');
define("PHP_REG_VALIDATE_DOMAIN",'/^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*\.(com\.cn|com|net|org|info|mobi|cn)$/');
define("PHP_REG_VALIDATE_NUMBERNOT0",'/^[1-9]\d*$/');
define("PHP_REG_VALIDATE_NAME15",'/^[a-zA-Z0-9|-]{1,15}$/');
define("PHP_REG_VALIDATE_IPRANGE",'/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])-(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/');
/***************************没试过--结束************************************//**ValidateCommit::validate("nm_config.php",array(
"nm_web_port"=>array('1|2','/^[0-9]*$/',0,65535),
"nm_web_timeout"=>array('3','/^[0-9]*$/'),
"radio_one"=>array(
"sel_val"=>$_REQUEST["radio_one"]
"sel_0"=>array("nm_web_port"=>array('1|2')),
"sel_1"=>array("nm_web_port"=>array('1|2'))
)
));**//** type 0.$_POST,1.$_GET 2.$_REQUST* ValidateCommit::validate("interface_edit.php",array(*   "name"=>array("type"=>1,"val"=>array('1')),*   "radio_negotiation"=>array("val"=>array('3','/^[0-1]$/')),*   "radio_speed"=>array("val"=>array('3','/^([0-3]|\s*)$/')),*   "text_mtu"=>array("val"=>array('1|2','/^[0-9]\d{2,3}$/',256,1500)),*   "name"=>array("val"=>array('1|5','checkNameCH'))
*  ));*/class ValidateCommit
{public static function validate($validate_url, $validate_reg){   //头上没有加验证参数配置,默认为TRUEif(!is_array($validate_reg)) {return true;}//验证结果$validate_ret = true;self::v($validate_reg,$validate_ret);if($validate_ret === false) {self::out($validate_url,$validate_ret);}}private function out($validate_url,$validate_ret) {echo "DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__." 校验结果:".var_export($validate_ret, true)."<br/>";exit;}/*** 获取页面提交的数据,以及校验标准;对提交的数据进行拆分提交,按照标准进行校验** @param [type] $validate_reg  校验的标准,*          即 array(2) { ["age"]=> array(2) { ["type"]=> int(0) *                        ["val"]=> array(4) { [0]=> string(3) "1|2" [1]=> string(16) "/^[0-9]\d{0,2}$/" [2]=> int(1) [3]=> int(255) } } * @param [type] $validate_ret  返回值* @return void*/private function v($validate_reg,&$validate_ret) {echo "<br/><br/>"."DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__."<br/>";if($validate_ret === true && is_array($validate_reg)) {foreach($validate_reg as $k=>$v) {                  //此时的key是post内的值echo "<br/><br/>******DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__." 开始校验:".var_export($k, true)."<br/>";if(array_key_exists("sel_val",$v)) {     //级联的验证$tk = "sel_".$v["sel_val"];if(is_array($v[$tk])) {self::v($v[$tk],$validate_ret);}} else {                                  //单次验证$validate_vaule = $_POST[$k];               //post后的值赋值给 validate_valueif(array_key_exists('type',$v)) {if($v['type'] == 1) {$validate_vaule = $_GET[$k];        //若type的值是1,则获取get值,赋值给 validate_value} else if($v['type'] == 2) {            $validate_vaule = $_REQUEST[$k];    //若type的值是2,则获取request值,赋值给 validate_value}}/*** "radio_one"=>array(* "type"=>0,* "mutiple_val"=>array("0"=>array('1|2'),"1"=>array('1|2'))*)*/if(is_array($validate_vaule)) {                     //若提交过来的值是数组var_dump("11111111111111111111提交过来的值是数组");if(array_key_exists('mutiple_val',$v)) { //不同方式检测foreach($v['mutiple_val'] as $sub_k => $sub_v) {$val = $validate_vaule[$sub_k];$tarr = explode("|",$sub_v[0]);$validate_flag = 0;foreach($tarr as $tv) {$validate_ret = self::vone($tv,$val,$sub_v);if($validate_ret === false) {$validate_flag = 1;break;}}if($validate_flag = 1) break;}} else if(array_key_exists('val',$v)) { //全部一种方式检测$tarr = explode("|",$v['val'][0]);foreach($tarr as $tv) {$validate_flag = 0;foreach($validate_vaule as $key => $val) {$validate_ret = self::vone($tv,$val,$v['val']);if($validate_ret === false) {$validate_flag = 1;break;}}if($validate_flag) {break;}}}} else {                                       //若提交过来的值不是数组//$valicheck['ipaddr_str']=array("type"=>0,"val"=>array('1|5','checkValidateAreaIp'));var_dump("222222222222222222222222222222222222若提交过来的值不是数组");$tarr = explode("|",$v['val'][0]);foreach($tarr as $tv) {$validate_ret = self::vone($tv,$validate_vaule,$v['val']);if($validate_ret === false) {break;}else{echo "DEBUG-- File:".__FILE__.",   Fun:".__FUNCTION__.",  Line:".__LINE__." 校验结果:".var_export($validate_ret, true)."<br/>";}}}}if($validate_ret === false) {break;}}}return $validate_ret;}/*** 判断参数的合法性* array(1) { ["age"]=> array(2) { ["type"]=> int(0) ["val"]=> array(4) { [0]=> string(3) "1|2" [1]=> string(16) "/^[0-9]\d{0,2}$/" [2]=> int(1) [3]=> int(255) } } } * * 根据arr["val"][0]; 在arr["val"][1]、arr["val"][2]、arr["val"][3] 规则下,判断提交的值的合法性    即:string(1) "1"* @param [type] $vtype     arr["val"][0]的值、一次只传入1个,在传入前对其按照|进行了分割            即:string(2) "25" * @param [type] $val       post/get/request提交的值* @param [type] $reg       arr["val"]     即:array(4) { [0]=> string(3) "1|2" [1]=> string(16) "/^[0-9]\d{0,2}$/" [2]=> int(1) [3]=> int(255) } * @return void*/private function vone($vtype,$val,$reg) {echo "<br/>"."DEBUG-- File:".__FILE__." Fun:".__FUNCTION__.", Line:".__LINE__."<br/>校验类型:".$vtype." 被校验的值:".$val." 校验规则:".var_export($reg, true)."<br/>";switch ($vtype) {case VALIDATE_EMPTY:                    if(empty($val) && $val !=0) { //1:不为空 但是可以为0return false;}break;case VALIDATE_INT_RANGE:                //2:正则匹配$reg[1]; $reg[2]<=$val<=$reg[3]if (!(preg_match($reg[1], $val) && $val >= $reg[2] && $val <= $reg[3])) {return false;}break;case VALIDATE_REG:                      //3:正则匹配$reg[1]if (!preg_match($reg[1], $val)) {return false;}break;case VALIDATE_MASK:                     //4:正则匹配$reg[1]; 正则匹配$reg[2];if (!(preg_match($reg[1], $val) || preg_match($reg[2], $val))) {return false;}break;case VALIDATE_FUNCTION:                //5:函数校验     if($reg[1]=='checkValidatePwdChk'){if (!($reg[1]($val,$reg[2],$reg[3]))) {return false;}}else{if (!($reg[1]($val))) { //$reg[1]为函数名,$val为校验准则return false;}}break;case VALIDATE_SELECT:                   //6:函数校验if (!(checkValidateSelectIn($val,$reg[1]))) {return false;}break;default:break;}return true;}}echo "<br/>"."DEBUG-- File:".__FILE__.", Line:".__LINE__."  POST/GET/REQUEST的所有数据如下:<br/>";
var_dump($_POST);echo "<br/>";
/**type为0: post值* type为1: get值* type为2: request值*///type:0-->post类型的age参数;  val的array 1|2-->$_POST['age']的值不为空,且不为0,,其值符合正则,且大于等于1小于等于255;             [1:不为空、不为零  2:正则、范围]$valicheck['age']=array("type"=>0,"val"=>array('1|2','/^[0-9]\d{0,2}$/',1,255));//type:0-->post类型的ipv4参数;  val的array 3-->$_POST['ipv4']的值符合ipv4格式;                                                  [3:正则,单次匹配]$valicheck['ipv4']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_IP));$valicheck['ipv4']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_IP_1));$valicheck['ipv4_1']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_IP_INTMASK));$valicheck['ipv4_2']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_IP_IPMASK));//type:0-->post类型的mask参数;  val的array 3-->$_POST['mask']的值符合ipv4格式;                                                  [3:正则,单次匹配]$valicheck['mask']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_MASK));$valicheck['mask_1']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_MASKINT));//type:0-->post类型的ipv6参数;  val的array 3-->$_POST['ipv6']的值符合ipv6格式;                                                  [3:正则,单次匹配]$valicheck['ipv6']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_IPV6));//type:0-->post类型的ipv4-6参数;  val的array 4-->$_POST['ipv4-6']的值符合ipv4格式或者ipv6格式;                                   [4:正则,多次匹配,符合ipv4或者ipv6]$valicheck['ipv4-6']=array("type"=>0,"val"=>array('4',PHP_REG_VALIDATE_IP,PHP_REG_VALIDATE_IPV6));//type:0-->post类型的ipv4-6参数;  val的array 4-->$_POST['ipv4-6']的值符合ipv4格式或者ipv6格式;                                   [4:正则,多次匹配,符合ipv4或者ipv6]$valicheck['mac']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_MAC));//type:0-->post类型的port参数;  val的array 3-->$_POST['port']的值符合port格式;                                                  [3:正则,单次匹配]$valicheck['port']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_PORT));$valicheck['port_1']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_PORT_ZERO));//type:0-->post类型的date参数;  val的array 3-->$_POST['date']的值符合日期时间格式;                                                  [3:正则,单次匹配]$valicheck['date']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_DATE));$valicheck['date_1']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_DATE_ZERO));$valicheck['time']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_TIME));$valicheck['datetime']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_DATETIME_ZERO));$valicheck['datetime']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_DATETIME_ZERO_1));$valicheck['datetime_1']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_DATETIME));//type:0-->post类型的password参数;  val的array 5-->$_POST['password']的值符合数字、字母、特殊字符中的两者,且大于等于8位小于等于10位 ;  [5:函数校验,checkValidatePwdChk为指定函数,或者自定义其他函数]$valicheck['password']=array("type"=>0,"val"=>array('5','checkValidatePwdChk',8,10));//type:0-->post类型的class参数;  val的array 5-->$_POST['class']的值符合字符串可为空;不为空时,由字母、数字、下划线、中划线、点和中文组成,1-31个字符,且不能以NMC_ 开头  [5:函数校验,checkValidateNameCH为自定义其他函数]$valicheck['name']=array("type"=>0,"val"=>array('5','checkValidateNameCH'));//type:0-->post类型的select参数;  val的array 6-->$_POST['select']的值在数组array('aaa','bbb','ccc')中,                           [6:,验证值是都被选中]$valicheck['select']=array("type"=>0,"val"=>array('6',array('aaa','bbb','ccc')));//??????//$valicheck['radio_one']=array("type"=>0,"mutiple_val"=>array("0"=>array('1|2'),"1"=>array('1|2')));//type:0-->post类型的ipv4area参数;  val的array 5-->$_POST['ipv4area']的值可为空、为ALL、为all、为1.1.11.1、为2.2.2.2-5.3.3.6    [5:函数校验,checkValidateAreaIp为检验ip的函数]$valicheck['ipv4area']=array("type"=>0,"val"=>array('5','checkValidateAreaIp'));$valicheck['ipv4area_1']=array("type"=>0,"val"=>array('5','checkValidatePureIp'));$valicheck['ipv4area_2']=array("type"=>0,"val"=>array('5','checkValidateIpMask'));//type:0-->post类型的ipv6area参数;  val的array 5-->$_POST['ipv6area']的值可为空、为ALL、为all、为2006::19\r\n2006::9-2006::19\r\n2006:19/64    [5:函数校验,checkValidateAreaIp为检验ip的函数]$valicheck['ipv6area']=array("type"=>0,"val"=>array('5','checkValidateAreaIpv6'));//type:0-->post类型的macarea参数;  val的array 5-->$_POST['macarea']的值可为空、为00:23:24:5D:58:71                 [5:函数校验,checkValidateMac为检验mac的函数]$valicheck['macarea']=array("type"=>0,"val"=>array('5','checkValidateMac'));//type:0-->post类型的portarea参数;  val的array 5-->$_POST['portarea']的值可为空、为1-65535之间的数                     [5:函数校验,checkValidatePort为检验端口的函数]$valicheck['portarea']=array("type"=>0,"val"=>array('5','checkValidatePort'));//时间校验: 匹配                                                  [3:正则,单次匹配]//$valicheck['time_2']=array("type"=>0,"val"=>array('3',PHP_REG_VALIDATE_TIME_2));  //type:0-->post类型的portarea参数;  val的array 5-->$_POST['port']的值可为x、a-b、a-b/c-d;  0<=port<=65535的数                     [5:函数校验,checkValidatePortAll为检验端口的函数]$valicheck['port_area']=array("type"=>0,"val"=>array('5',"checkValidatePortAll"));//type:0-->post类型的portarea参数;  val的array 5-->$_POST['ipPort']的值可为 0<=port<=255                     [5:函数校验,checkValidatePortAll为检验端口的函数]$valicheck['ipPort']=array("type"=>0,"val"=>array('5',"checkValidateIpPortAll"));
ValidateCommit::validate("index.html",$valicheck);/** 参数解释:$pwd密码  $min密码最小值 $max密码最大值* 密码规则:密码由数字、字母、特殊字符内的两种组合而成;最小8位* */
function checkValidatePwdChk($pwd,$min,$max){if($min!=0){if(strlen($pwd)<$min){return false;}}if($max!=0){if(strlen($pwd)>$max){return false;}}$pattern= '/^[0-9a-z\~\!\@\#\$\%\^\*\&\-\+\,\.\;\|\>\<$]{8,}$/i'; // i 不区分大小写if(preg_match($pattern,$pwd)){$res1 = preg_match('/[0-9]+/', $pwd);$res2 = preg_match('/[A-Za-z]+/', $pwd);$res3 = preg_match('/[\~\!\@\#\$\%\^\&\*\-\+\,\.\;\|\>\<]+/', $pwd);if($res1+$res2+$res3>=2){return true;}else{return false;}}else{return false;}return true;
}/** 参数解释:$str被查找的字符串  $arr数组* 规则:查抄字符串$str是都在数组$arr内* */
function checkValidateSelectIn($str,$arr) {$str = trim($str);if($str == '') return true;$result = false;if(is_array($arr)) {foreach($arr as $val) {if((string)$val == (string)$str) {$result = true;break;}}}return $result;
}/** 参数解释:$str字符串* 规则:字符串可为空;不为空时,由字母、数字、下划线、中划线、点和中文组成,1-31个字符,且不能以NMC_ 开头* */
function checkValidateNameCH($str) {if(trim($str) == '') return true;$reg = "/^[\x{4e00}-\x{9fa5}|a-zA-Z0-9|_|\-\.]{0,32}$/u";$exceptStr = "NMC_";if($str!=''&&(!preg_match($reg,$str)||strpos($str,$exceptStr)===0)) {return false;} else {$newStr = iconv("GBK","UTF-8",$str);if(strlen(preg_replace('/[\x{4e00}-\x{9fa5}]/u','xxx',$str)) >32){return false;}}return true;
}/** 参数解释:$str为字符串,ipv4area   "1.1.1.1/24\r1.1.1.1/255.255.255.0"* 规则:$str可为空 ''; 可为ALL; *      可为 1.1.1.1/24\r1.1.1.1/255.255.255.0* */
function checkValidateIpMask($str) {if(trim($str) == '') return true;$ipArr = explode(chr(13),$str);$exp3 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/([0-9]|1\d|2\d|3[0-2])$/";$exp4 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/((254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0))$/";$result = true;for($i=0; $i<count($ipArr);$i++) {if($ipArr[$i] == '') continue;$ip = trim($ipArr[$i]);if(stripos($ip,'/')!==FALSE) {if(!(preg_match($exp3,$ip)||preg_match($exp4,$ip))) {$result = false;break;}} else {$result = false;break;}}return $result;
}/** 参数解释:$str为字符串,ipv4area   "1.1.1.1\r1.1.1.1-5.5.5.5"* 规则:$str可为空 ''; 可为ALL; *      可为 1.1.1.1\r1.1.1.1-5.5.5.5* */
function checkValidatePureIp($str) {if(trim($str) == '') return true;if(strtolower(trim($str)) == 'all' || trim($str) == 'All') return true;$ipArr = explode(chr(13),$str);$exp1 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/";$exp2 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])-(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/";$result = true;for($i=0; $i<count($ipArr);$i++) {if($ipArr[$i] == '') continue;$ip = trim($ipArr[$i]);if(stripos($ip,'-')!==FALSE) {if(!(preg_match($exp2,$ip))) {$result = false;break;}} else if(!(preg_match($exp1,$ip))) {$result = false;break;}}return $result;
}/** 参数解释:$str为字符串,ipv4area   "1.1.1.1\r1.1.1.1-5.5.5.5\r192.168.1.10/24\r192.168.1.20/255.255.255.0"* 规则:$str可为空 ''; 可为ALL; 可为全部*      可为 1.1.1.1\r1.1.1.1-5.5.5.5\r192.168.1.10/24\r192.168.1.20/255.255.255.0* */
function checkValidateAreaIp($str) {if(trim($str) == '') return true;/*if(strtolower(trim($str)) == 'all' || trim($str) == _gettext('All')) return true;*/if(trim($str) == 'All') return true;$ipArr = explode(chr(13),$str);$exp1 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/";$exp2 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])-(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/";$exp3 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/([0-9]|1\d|2\d|3[0-2])$/";$exp4 = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/((254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0))$/";$result = true;for($i=0; $i<count($ipArr);$i++) {if($ipArr[$i] == '') continue;$ip = trim($ipArr[$i]);if(stripos($ip,'/')!==FALSE) {if(!(preg_match($exp3,$ip)||preg_match($exp4,$ip))) {$result = false;break;}} else if(stripos($ip,'-')!==FALSE) {if(!(preg_match($exp2,$ip))) {$result = false;break;}} else if(!(preg_match($exp1,$ip))) {$result = false;break;}}return $result;
}/*** 功能:检查textarea里的ipv6 ,一行一个地址对象, 格式范例:2006::19\r\n2006::9-2006::19\r\n2006:19/64** @param [type] $str    ipv6地址串* @return void     成功 返回turn; 失败 返回false;*/
function checkValidateAreaIpv6($str) {if(trim($str) == '') return true;if(strtolower(trim($str)) == 'all' || trim($str) == 'All') return true;$ipArr = explode(chr(13),$str);$rg = '/^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$/';$rg3 = '/^([0-9]+)$/';$result = true;for($i=0; $i<count($ipArr);$i++) {if($ipArr[$i] == '') continue;$ip = trim($ipArr[$i]);if(stripos($ip,'/')!==FALSE) {$subArr = explode('/',$ip);if(!(count($subArr) == 2 && preg_match($rg,$subArr[0]) && preg_match($rg3,$subArr[1]))) {$result = false;break;}} else if(stripos($ip,'-')!==FALSE) {$subArr = explode('-',$ip);if(!(count($subArr) == 2 && preg_match($rg,$subArr[0]) && preg_match($rg,$subArr[1]))) {$result = false;break;}} else if(!(preg_match($rg,$ip))) {$result = false;break;} } return $result;
}/** 参数解释:$str为字符串,* 规则:$str可为空 ''*      可为 00:23:24:5D:58:71* */
function checkValidateMac($str) {if(trim($str) == '') return true;$ipArr = explode(chr(13),$str);$exp2 = "/^([0-9a-fA-F]{2})(([\s:][0-9a-fA-F]{2}){5})$/";$exp3 = "ff:ff:ff:ff:ff:ff";$result = true;for($i=0; $i<count($ipArr);$i++) {if($ipArr[$i] == '') continue;$ip = trim($ipArr[$i]);if(!preg_match($exp2,$ip) || strtolower($ip) == $exp3) {$result = false;break;}}return $result;
}/*** 功能:0<port<=65535** @param [type] $str port字符串,可为空,多个之间用\r* @return void*/
function checkValidatePort($str) {if(trim($str) == '') return true;$ipArr = explode(chr(13),$str);$exp2 = "/^[0-9]\d{0,4}$/";$result = true;for($i=0; $i<count($ipArr);$i++) {if($ipArr[$i] == '') continue;$ip = trim($ipArr[$i]);if(!preg_match($exp2,$ip) || $ip<1 || $ip>65535) {$result = false;break;}}return $result;
}/*** 功能:校验port (x; a-b; a-b/c-d;)** @param [type] $str 端口字符串* @return void*/
function checkValidatePortAll($str)
{   if(trim($str) == '') return true;       //若字符串为空,返回true$rg = "/^(\d{0,4}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/";    $portArr = explode(chr(13), $str);$result = true;for($i=0; $i<count($portArr); $i++){if($portArr[$i] == '') continue;$portOne = trim($portArr[$i]);if(stripos($portOne,'/')!=FALSE){       //若不等于-1,说明情况为:a-b/c-d$portTemp = explode('/', $portOne);if(stripos($portTemp[0], '-')!==FALSE)// /左側有-{  $p = explode('-', $portTemp[0]);if(!(preg_match($rg, trim($p[0]))) || !(preg_match($rg, trim($p[1]))) ){$result = false;break;} }else{                                 // /左側没有-if(!(preg_match($rg, trim($portTemp[0])))){ $result = false;break;} }if(stripos($portTemp[1], '-')!==FALSE) // /右側有-{    $p = explode('-', $portTemp[1]);if(!(preg_match($rg, trim($p[0]))) || !(preg_match($rg, trim($p[1]))) ){$result = false;// var_dump($result);break;} }else{                                  // /右側没有-if(!(preg_match($rg, trim($portTemp[1])))){$result = false;break;} }}else if(stripos($portOne,'-')!==FALSE){ //当情况为: a-b$p = explode('-', $portOne);    //含有-if(!(preg_match($rg, trim($p[0]))) || !(preg_match($rg, trim($p[1]))) ){$result = false;break;} }else{                          //当情况为: xif(!(preg_match($rg, trim($portOne)))){$result = false;break;} }}return $result;
}/*** 功能:校验Ip port (0~255);多个之间用\r隔开** @param [type] $str ip端口字符串* @return void*/
function checkValidateIpPortAll($str)
{   if(trim($str) == '') return true;       //若字符串为空,返回true$rg = "/^([0-9]\d{0,2})$/";    $portArr = explode(chr(13), $str);$result = true;for($i=0; $i<count($portArr); $i++){if($portArr[$i] == '') continue;if(!(preg_match($rg, trim($portArr[$i])))){$result = false;break;} }return $result;
}
?>

3、函数使用小技巧–快速了解如何使用

 * ValidateCommit::validate("index.html",array(*   "name"=>array("type"=>1,"val"=>array('1')),*   "radio_negotiation"=>array("val"=>array('3','/^[0-1]$/')),*   "radio_speed"=>array("val"=>array('3','/^([0-3]|\s*)$/')),*   "text_mtu"=>array("val"=>array('1|2','/^[0-9]\d{2,3}$/',256,1500)),*   "name"=>array("val"=>array('1|5','checkNameCH'))
*  ));
1、type字段  0.$_POST, 1.$_GET,  2.$_REQUST
2、val字段  1 验证为空2 验证整数,3 验证单个正则,4 验证两个正则5 验证函数6 验证select多个之间用数线|分割例如:
$valicheck['age']=array("type"=>0,"val"=>array('1'));  //age字段不可为空
$valicheck['age']=array("type"=>0,"val"=>array('2','/^[0-9]\d{0,2}$/',1,255));//age值其值符合正则,且大于等于1小于等于255;
$valicheck['age']=array("type"=>0,"val"=>array('3','/^[0-9]\d{0,2}$/')); //验证age符合/^[0-9]\d{0,2}$/
$valicheck['ipv4-6']=array("type"=>0,"val"=>array('4',PHP_REG_VALIDATE_IP,PHP_REG_VALIDATE_IPV6));//[4:正则,多次匹配,符合ipv4或者ipv6]
$valicheck['password']=array("type"=>0,"val"=>array('5','checkValidatePwdChk',8,10));//[5:已经定义好的函数]
$valicheck['name']=array("type"=>0,"val"=>array('5','checkValidateNameCH'));//[5:自定义的函数]
$valicheck['select']=array("type"=>0,"val"=>array('6',array('aaa','bbb','ccc')));//[6:查看字符串是否在array内]
$valicheck['age']=array("type"=>0,"val"=>array('1|2','/^[0-9]\d{0,2}$/',1,255));  //age值不为空,且不为0,,其值符合正则,且大于等于1小于等于255;

php对参数校验(名称、地址、掩码、日期、时间、端口)相关推荐

  1. ubuntu shell获取IP地址、日期时间、重定向保存log,shell脚本保存管道命令执行结果

    # shell 字符串替换还是用 sed比较方便 $ ip addr | grep global | cut -b 10-20 | sed 's/\./_/g' # 效果是: 输出 10_123_12 ...

  2. PHP 中日期时间函数 date() 用法总结

    [导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它 ...

  3. JavaScript中的内置对象-8--4.date对象中-获取,设置日期时间的方法; 获取,设置年月日时分秒及星期的方法;...

    学习目标 1.掌握创建日期对象的方法 2.掌握date对象中获取日期时间的方法 3.掌握date对象中设置日期时间的方法 如何创建一个日期对象 语法:new Date(); 功能:创建一个日期时间对象 ...

  4. SQL Server日期时间字符串的处理和转换

    在SQL Server中,您可以使用T-SQL函数进行日期时间字符串的处理和转换.要判断一个日期字符串是否包含时间信息,可以使用T-SQL内置的函数CONVERT和TRY_CONVERT,并指定时间格 ...

  5. 用MATLAB AppDesigner开发了一款的高级日期时间计算器(Advanced Date Time Calculator)

    偶然一次机会接触了TriSun公司开发的Advanced Date Time Calculator,中文名称叫高级日期时间计算器,体验之后觉得不错,于是决定自己动手捣鼓一个,于是乎巴山日期时间工具箱就 ...

  6. php 中日期时间函数大全,PHP 中日期时间函数 date() 用法总结

    [导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它 ...

  7. java yyyy-mm-dd 日期格式_Java中的日期时间格式化

    原标题:Java中的日期时间格式化 1 Java日期时间格式化的概念 我们在日常的开发过程中常常会碰到关于日期时间的计算与存储问题,比如我们要把一个当前时间类型转换成字符串类型,我们会直接使用Util ...

  8. php 固话验证,收货地址参数校验:收货人、邮编、地址、手机、固话等

    收货地址参数校验:收货人.邮编.地址.手机.固话等. 收货人: function checkshr() { var shr = $('#shr').val(); if (shr.length < ...

  9. 收货地址参数校验:收货人、邮编、地址、手机、固话等

    2019独角兽企业重金招聘Python工程师标准>>> 收货地址参数校验:收货人.邮编.地址.手机.固话等. 收货人: function checkshr() {var shr = ...

最新文章

  1. 卸载破解的Navicat!操作所有的数据库靠它就够了!
  2. 定价错误: 必要条件 MWST 丢失
  3. p:commandButton vs h:commandButton
  4. (7) hibernate之级联cascade和关系维持inverse
  5. jzoj6296-投票【期望dp,贪心】
  6. 一个软件工程师的职业规划
  7. Python判断变量类型
  8. 分布式事务与2PC、3PC理论详解
  9. 主动出击,马斯克欲用 430 亿美元拿下 Twitter
  10. 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)
  11. 【知识点总结】jQuery的扩展方法
  12. L1- 001——008
  13. mtk android高级工具,Android6.0 MTK6737 DCT 工具介绍 · Younix’s Studio
  14. java date the type is ambiguous_一个java ambiguous method 的问题
  15. idea修改中文字体
  16. 360浏览器怎么添加拓展(有图文步骤)
  17. CAE-仿真案例学习
  18. 英语歌曲:I Love You -Stewart Mac
  19. 昇腾 (Ascend) AI 处理器:达芬奇架构
  20. 『Hi,我是易建科技eKing Cloud!』

热门文章

  1. 微软亚洲研究院的一道面试题
  2. 欧氏距离(Euclidean distance)
  3. 一种基于CUDA标准的异构并行编程模型开发简介
  4. DRV8818步进电机一种应用场景及实现思路
  5. 景点门票销售管理系统 基于 python实现gui界面 之 笔记
  6. GCC 编译 C 语言文件
  7. shadertoy入门教程
  8. java面试题对日开发_【埃森哲Java面试】面试的是对日java的后端开发-看准网
  9. 在windows下启动容器时,报 the input device is not a TTY. If you are using mintty, try prefixing the command
  10. matlab射影几何,一种利用单幅图像的现场摄像机自标定方法