简单通用的验证器

开发中使用最频繁莫非是验证起了,最近在看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;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值