www.gusucode.com > baigo CMS PHP开源网站管理系统 v1.2.2源码程序 > baigocms_v1.2.2/bg_core/func/validate.func.php

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

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

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

返回多维数组
    str 表单最终值
    status 状态
*/
function validateStr($str, $min, $max, $type = "str", $format = "text") {
    $_obj_v = new CLASS_VALIDATE();

    switch ($type) {
        case "str":
            $_status = $_obj_v->is_text($str, $min, $max, $format); //验证字符串
            $str     = htmlentities($str, ENT_QUOTES, "UTF-8");
        break;
        case "digit":
            $_status = $_obj_v->is_digit($str, $min, $max, $format); //验证字符串
        break;
        case "num":
            $_status = $_obj_v->is_num($str, $min, $max); //验证个数
        break;
    }

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

class CLASS_VALIDATE {

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

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

    /*------验证格式------
    @str 需验证字符串
    @format 格式,text 为任意
    */
    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{0,}(\.)?(\w+)@\w+(\.\w+)+$/"; //Email
            break;
            case "url":
                $_reg = "/^http[s]?:\/\/(.*|-)+\.(.*|-)+$/"; //URL地址
            break;
            case "alphabetDigit":
                $_reg = "/^[a-z|A-Z|\d]*$/"; //数字英文字母
            break;
            case "strDigit":
                $_reg = "/^[\x{4e00}-\x{9fa5}0-9A-Za-z_]+$/u"; // "/^[\\\u4e00-\\\u9fa5|\\\uf900-\\\ufa2d|\w]*$/" 字母中文数字下划线
            break;
            default:
                $_reg = ""; //默认
            break;
        }

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

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

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

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