开发中使用最频繁莫非是验证起了,最近在看swoole_framework发现他们的验证器
<?php
namespace Swoole;
/**
* 数值验证类,类中的方法都是静态的,用于检测一个变量是否符合某种规则,不符合返回false,符合返回原值
* @author tianfeng.han
* @package SwooleSystem
* @subpackage Validate
* @link http://www.swoole.com/
*/
class Validate
{
static $regx = array(
//邮箱
'email'=>'/^[\w-\.]+@[\w-]+(\.(\w)+)*(\.(\w){2,4})$/',
//手机号码
'mobile'=>'/^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$/',
//固定电话带分机号
'tel'=>'/^((0\d{2,3})-)(\d{7,8})(-(\d{1,4}))?$/',
//固定电话不带分机号
'phone'=>'/^\d{3}-?\d{8}|\d{4}-?\d{7}$/',
//域名
'domain'=>'/@([0-9a-z-_]+.)+[0-9a-z-_]+$/i',
//日期
'date'=>'/^[1-9][0-9][0-9][0-9]-[0-9]{1,2}-[0-9]{1,2}$/',
//日期时间
'datetime'=>'/^[1-9][0-9][0-9][0-9]-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}(:[0-9]{1,2}){1,2}$/',
//时间
'time'=>'/^[0-9]{1,2}(:[0-9]{1,2}){1,2}$/',
/*--------- 数字类型 --------------*/
'int'=>'/^\d{1,11}$/', //十进制整数
'hex'=>'/^0x[0-9a-f]+$/i', //16进制整数
'bin'=>'/^[01]+$/', //二进制
'oct'=>'/^0[1-7]*[0-7]+$/', //8进制
'float'=>'/^\d+\.[0-9]+$/', //浮点型
/*---------字符串类型 --------------*/
//utf-8中文字符串
'chinese'=>'/^[\x{4e00}-\x{9fa5}]+$/u',
/*---------常用类型 --------------*/
'english' => '/^[a-z0-9_\.]+$/i', //英文
'nickname' => '/^[\x{4e00}-\x{9fa5}a-z_\.]+$/ui', //昵称,可以带英文字符和数字
'realname' => '/^[\x{4e00}-\x{9fa5}]+$/u', //真实姓名
'password' => '/^[a-z0-9]{6,32}$/i', //密码
'area' => '/^0\d{2,3}$/', //区号
'version' => '/^\d+\.\d+\.\d+$/', //版本号
'url' => '((https?)://(\S*?\.\S*?))([\s)\[\]{},;"\':<]|\.\s|$)', //URL
);
/**
* 正则验证
* @param $regx
* @param $input
* @return bool|string
*/
static function regx($regx, $input)
{
$n = preg_match($regx, $input, $match);
if ($n === 0)
{
return false;
}
else
{
return $match[0];
}
}
static function isVersion($ver)
{
return self::check('version', $ver);
}
static function check($ctype, $input)
{
if (isset(self::$regx[$ctype]))
{
return self::regx(self::$regx[$ctype], $input);
}
else
{
return self::$ctype($input);
}
}
/**
* 检查数组是否缺少某些Key
* @param array $array
* @param array $keys
*
* @return bool
*/
static function checkLacks(array $array, array $keys)
{
foreach($keys as $k)
{
if (empty($array[$k]))
{
return false;
}
}
return true;
}
/**
* 验证字符串格式
* @param $str
* @return false or $str
*/
static function string($str)
{
return filter_var($str, FILTER_DEFAULT);
}
/**
* 验证是否为URL
* @param $str
* @return false or $str
*/
static function url($str)
{
return filter_var($str, FILTER_VALIDATE_URL);
}
/**
* 过滤HTML,使参数为纯文本
* @param $str
* @return false or $str
*/
static function text($str)
{
return filter_var($str, FILTER_SANITIZE_STRING);
}
/**
* 检测是否为gb2312中文字符串
* @param $str
* @return false or $str
*/
static function chinese_gb($str)
{
$n = preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str,$match);
if($n===0) return false;
else return $match[0];
}
/**
* 检测是否为自然字符串(可是中文,字符串,下划线,数字),不包含特殊字符串,只支持utf-8或者gb2312
* @param $str
* @return false or $str
*/
static function realstring($str,$encode='utf8')
{
if($encode=='utf8') $n = preg_match('/^[\x{4e00}-\x{9fa5}|a-z|0-9|A-Z]+$/u',$str,$match);
else $n = preg_match("/^[".chr(0xa1)."-".chr(0xff)."|a-z|0-9|A-Z]+$/",$str,$match);
if($n===0) return false;
else return $match[0];
}
/**
* 检测是否一个英文单词,不含空格和其他特殊字符
* @param $str
* @return false or $str
*/
static function word($str, $other='')
{
$n = preg_match("/^([a-zA-Z_{$other}]*)$/",$str,$match);
if($n===0) return false;
else return $match[0];
}
/**
* 检查是否ASSIC码
* @param $value
* @return true or false
*/
static function assic($value)
{
$len = strlen($value);
for ($i = 0; $i < $len; $i++)
{
$ord = ord(substr($value, $i, 1));
if ($ord > 127) return false;
}
return $value;
}
/**
* IP地址
* @param $value
* @return bool
*/
static function ip($value)
{
$arr = explode('.', $value);
if (count($arr) != 4)
{
return false;
}
//第一个和第四个不能为0或255
if (($arr[0] < 1 or $arr[0] > 254) or ($arr[3] < 1 or $arr[3] > 254))
{
return false;
}
//中间2个可以为0,但不能超过254
if (($arr[1] < 0 or $arr[1] > 254) or ($arr[2] < 0 or $arr[2] > 254))
{
return false;
}
return true;
}
/**
* 检查值如果为空则设置为默认值
* @param $value
* @param $default
* @return unknown_type
*/
static function value_default($value,$default)
{
if(empty($value)) return $default;
else return $value;
}
}