www.gusucode.com > baigo SSO单点登录系统 v3.0源码程序 > baigosso_v3.0/core/func/validate.func.php

    <?php
/*-----------------------------------------------------------------
!!!!警告!!!!
以下为系统文件,请勿修改
-----------------------------------------------------------------*/

//不能非法包含或直接执行
if (!defined('IN_BAIGO')) {
    exit('Access Denied');
}

/*------验证表单------
@str 验证字符串
@min 最小
@max 最大
@type 类型
@format 格式

返回多维数组
    str 表单最终值
    status 状态
*/
function fn_validate($str, $min = 0, $max = 0, $type = 'str', $format = 'text', $safe_chk = true) {
    switch ($type) {
        case 'str':
            $_status = CLASS_VALIDATE::is_text($str, $min, $max, $format); //验证字符串
        break;
        case 'digit':
            $_status = CLASS_VALIDATE::is_digit($str, $min, $max); //验证字符串
        break;
        case 'num':
            $_status = CLASS_VALIDATE::is_num($str, $min, $max); //验证个数
        break;
    }

    if ($safe_chk) {
        $str = fn_safe($str);
    }

    return array(
        'str'     => $str,
        'status'  => $_status
    );
}

class CLASS_VALIDATE {

    /*------验证长度------
    @str 需验证字符串
    @length(min, max) 数组,(最小长度, 最大长度) 0 为不限制

    返回字符
    too_short 太短
    too_long 太长
    ok 正常
    */
    static function v_leng($str, $min, $max) {
        if ($min > 0 && strlen($str) < $min) {
            $_status = 'too_short'; //如果定义最小长度,且短于,则返回太短
        } else if ($max > 0 && strlen($str) > $max) {
            $_status = 'too_long'; //如果定义最大长度,且长于,则返回太长
        } else {
            $_status = 'ok'; //返回正确
        }
        return $_status;
    }

    /*------验证格式------
    @str 需验证字符串
    @format 格式,text 为任意
    */
    static function v_reg($str, $format) {
        switch ($format) {
            case 'date':
                $_reg = '/^[0-9]{4}-(((0?[13578]|(10|12))-(0?[1-9]|[1-2][0-9]|3[0-1]))|(0?2-(0[1-9]|[1-2][0-9]))|((0?[469]|11)-(0[1-9]|[1-2][0-9]|30)))$/'; //日期
            break;
            case 'time':
                $_reg = '/^(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])(:([0-5][0-9]))?$/';
            break;
            case 'datetime': //日期时间
                $_reg = '/^[0-9]{4}-(((0?[13578]|(10|12))-(0?[1-9]|[1-2][0-9]|3[0-1]))|(0?2-(0[1-9]|[1-2][0-9]))|((0?[469]|11)-(0[1-9]|[1-2][0-9]|30)))\s(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])(:([0-5][0-9]))?$/';
            break;
            case 'int':
                $_reg = '/^(\+|-)?\d*$/'; //整数
            break;
            case 'digit':
                $_reg = '/^(\+|-)?\d*(\.\d+)*$/'; //数值,可以包含小数点
            break;
            case 'email':
                $_reg = '/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/'; //Email
            break;
            case 'url':
                $_reg = '/^((http|ftp|https):\/\/)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(\/[a-zA-Z0-9\&%_\.\/-~-]*)?$/'; //URL地址
            break;
            case 'alphabetDigit':
                $_reg = '/^[a-zA-Z\d]*$/'; //数字英文字母
            break;
            case 'strDigit':
                $_reg = '/^[\x{4e00}-\x{9fa5}a-zA-Z\d-_]*$/u'; // '/^[\\\u4e00-\\\u9fa5|\\\uf900-\\\ufa2d|\w]*$/' 中文字母数字下划线连字符
            break;
            case 'alias':
                $_reg = '/^[a-zA-Z\d-_]*$/'; // '/^[\\\u4e00-\\\u9fa5|\\\uf900-\\\ufa2d|\w]*$/' 字母数字下划线连字符
            break;
            default:
                $_reg = ''; //默认
            break;
        }

        if (!fn_isEmpty($str) && $format != 'text') { //如果值不为空,且格式不为text则验证
            if (preg_match($_reg, $str)) {
                return true; //验证通过,返回正确
            } else {
                return false; //验证失败,返回错误
            }
        } else {
            return true; //如果为text,直接返回正确
        }
    }

    /*------验证是否为字符串------
    @str 需验证的字符串
    @length(min, max) 数组,(最小长度, 最大长度) 0 为不限制
    @format 格式
    */
    static function is_text($str, $min, $max, $format) {
        $_status_leng = self::v_leng($str, $min, $max);
        if ($_status_leng != 'ok') {
            $_status = $_status_leng; //如验证长度出错,直接返回错误
        } else {
            if (self::v_reg($str, $format)) {
                $_status = 'ok'; //格式验证成功,返回正确
            } else {
                $_status = 'format_err'; //格式验证失败,返回错误
            }
        }
        return $_status;
    }

    /*------验证数字------
    @num 需验证的数字
    @length(min, max) 数组,(最小个数, 最大个数) 0 为不限制
    */
    static function is_digit($num, $min, $max) {
        if (is_numeric($num)) {
            if ($min > 0 && $num < $min){
                $_status = 'too_small'; //如果定义最小数,且小于,则返回太小
            } else if ($max > 0 && $num > $max){
                $_status = 'too_big'; //如果定义最大数,且大于,则返回太大
            } else {
                $_status = 'ok'; //返回正确
            }
        } else {
            $_status = 'format_err'; //格式验证失败,返回错误
        }
        return $_status;
    }

    /*------验证个数------
    @num 需验证的个数
    @length(min, max) 数组,(最小个数, 最大个数) 0 为不限制
    */
    static function is_num($num, $min, $max) {
        if ($min > 0 && $num < $min){
            $_status = 'too_few'; //如果定义最小个数,且少于,则返回太少
        } else if ($max > 0 && $num > $max){
            $_status = 'too_many'; //如果定义最大个数,且多于,则返回太多
        } else {
            $_status = 'ok'; //返回正确
        }
        return $_status;
    }
}