学新通技术网

PHP匹配正则自动验证表单-表单验证器

Luke 17230 1
PHP匹配正则自动验证表单-表单验证器
<?php

/**
 * 正则自动验证传入数据
 *
 * @Author luke.wu
 *
 * @param  string $keyword 传入的关键字要检索的范围
 * @param  string $string 需要用正则匹配的内容
 *
 * @return bool
 */
function is_string_regular_type(string $keyword, string $string):bool
{
    //中文关键字
    $chinaKeyword = array('CNM', 'CNQJ', '草', '艹', '草泥马', '操你妈', '草你全家', '全四家', '死去吧', '死全家', '死吧', '游戏', '马云', '马化腾', '房事', '丰满', '人流', '美胸', '男人', '增粗', '堕胎', '下班', '整容', '妊娠', '男性', '女', '情趣', '肛裂', '性趣', '鼻炎', '美女', '功夫汤', '爆', '白带', '老婆', '催情', '紧', '丰胸', '女人', '女性', '胸', '阿波罗', '癌症', '满足', '老总', '狐臭', '糜烂', '成人', '痔疮', '勃起', '医疗', '红肿', '尖叫', '整形', '早泄', '生殖器', '小儿脑瘫', '激情', '又粗又大', '排卵', '性交', '痛经', '性福', '避孕', 'maxman', '妇科病', '性', '计生', '瘦身', '无痛', '个人护理', '前列腺', '射精', '包茎', '乳腺', '夜', '偷偷', '包皮', '硬', '停经', '阴茎', '公关', '偷看', '透视', '减肥', '考试设备', '缩阴', '遗精', '性病', '阳萎', '聚光体', '妇科', '男科', '老公', '泌尿', '阳痿', '增高', '持久', '白领', '阴道', '美容', '增大', '意外怀孕', '牛逼', '抽奖', '摇奖', '情侣', '三点', '小弟弟', '黄色', '邪恶', '丝袜', '成人', '18禁', '18禁止', '十八禁止', '事变', '狗日的', '垃圾', '废物', '傻逼', '煞笔', '傻比', '沙比', '蠢猪', '婊子', '贱人', '贱货', '贱逼', '色女', '母狗', '跳蛋', '自慰', '手淫', '射精', '内射', '颜射', '乳射', '操你', '草你', '日你', '日死你', '打炮', '打野炮', '插入', '插你', '插逼', '狂插', '干你', '操逼', '肏逼', '日逼', '淫逼', '美臀', '胴(dòng)体', '阴毛', '美穴', '阴户', '阴毛', '阴道', '人民大会堂', '任命大会堂', '阴唇', '小穴', '咪咪', '奶子', '乳房', '乳头', '子宫', '阴茎', '阴囊', '阳具', '龟头', '肉棒', '鸡鸡', '小鸡鸡', '下体', '暴动', '恐怖', '自杀', '投毒', '破坏', '叛乱', '屠杀', '虐待', '杀人', '抢劫', '走私', '贿赂', '偷渡', '强奸', '轮奸', '轮暴', '操死', '干死你', '镇压', '法院', '检察院', '起诉', '省长', '公安', '民警', '警察', '武警', '人民', '政府', '中南海', '人大', '总理', '人民代表大会', '政协', '政治协商会议', '共产党', '国民党', '民主党', '佛教', '伊斯兰', '基督教', '安拉', '耶稣。帝国主义', '军国主义', '独裁', '主义', '独裁主义', '禽流感', '台湾', '台独', '台盟', '藏独', '蒙独', '达赖', '喇嘛', '法轮', '法论', '自焚', '钓鱼岛', '希特勒', '法西斯', '黑社会', '日本', '美国', '俄国', '朝鲜', '抗日', '小泉', '天皇', '国军', '共军', '毛泽东', '毛主席', '刘少奇', '朱德', '周恩来', '周总理', '邓小平', '江泽民', '江主席', '胡锦涛', '胡主席', '习近平', '朱镕基', '朱总理', '温家宝', '温总理', '蒋介石', '蒋经国', '连战', '华国锋', '赵紫阳', '李鹏', '李克强', '叶剑英', '林彪', '江青', '金正日', '金日成', '国家级', '世界级', '最高级', '最佳', '国家级产品', '全网销售第一', '全球首发', '全国首家', '全网首发', '等级工艺', 'NO.1', 'Top1', '极致', '永久', '掌门人', '领袖品牌', '赌博', '博彩类', '水果机', '老虎机', '大富翁游戏', '彩票', '六合彩', '特码', '军警用武器装备', '色情类:丝足按摩', '情趣养生', '保健类', '伟哥', '延时药剂', '印度神油', 'ATT黑牛', '警用', '枪支类', '警徽', '警用类产品', '各类枪支', '仿真枪', '弩', '手铐', '电子手铐', '审讯记录系统', '审讯椅', '审讯设备', '发票', '车票类:发票', '代开发票', '跟踪', '调查类', '私家侦探', '婚外情调查', '跟踪监视', '债务', '催讨类', '债务催收', '要账', '债务清算', '催账调查', '套卡', '套现类', '信用卡代还', '社保卡套现', '基金投资套现', '违章', '非法类', '卫星电视', '电话安装', '信号干扰器', '妨碍交通管理产品', '反雷达测速仪', '地磅遥控器', '干扰器', '解码器', '银行卡复制设备', '股票债券等股权转让', '黄页', '企业名录', '民间借贷',);
    //验证格式
    $type_array = array(
        //用户名
        'username' => array(
            //格式类型验证
            'type'   => array(
                'code'    => '/^\w+((-\w+)|(\.\w+))*\w+[A-Za-z0-9]/',
                'success' => '用户名验证格式正确',
                'error'   => '仅支持字母、数字和-、_、@、.的组合',
            ),
            //格式类型长度验证
            'number' => array(
                'code'    => '/^\w+((-\w+)|(\.\w+))*\w+[A-Za-z0-9]{4,20}/',
                'success' => '用户名长度正确',
                'error'   => '帐号建议4~32个字符',
            ),
        ),
        //邮箱
        'email' => array(
            //格式类型验证
            'type'   => array(
                'code' => '/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/',
                'success' => '邮箱格式正确',
                'error'   => '邮箱格式不正确',
            ),
        ),
        //密码
        'password' => array(
            //格式类型验证
            'type'   => array(
                'code' => '/^[0-9a-zA-Z_!!@#$%^&*()]{0,20}$/',
                'success' => '密码格式正确',
                'error'   => '密码格式不正确',
            ),
            //格式类型长度验证
            'number' => array(
                'code'    => '/^\w+((-\w+)|(\.\w+))*\w+[A-Za-z0-9]{4,20}/',
                'success' => '密码长度正确',
                'error'   => '密码应6~20个字符',
            ),
        ),
        //手机号
        'phone' => array(
            //验证格式
            'type'   => array(
                'code' => '/^1[345678]\d{9}$/',
                'success' => '手机号格式正确',
                'error'   => '手机号格式与长度不正确',
            ),
        ),
        //企业名称
        'companyname' => array(
            //验证是否存在非法汉字
            'chinese'   => array(
                'code' => $chinaKeyword,
                'success' => '企业名称正确',
                'error'   => '企业名称存在非法汉字',
            ),
            //格式类型长度验证
            'number' => array(
                'code'    => '/^[\x{4e00}-\x{9fa5}][A-Za-z0-9-_()-()]{4,40}$/u',
                'success' => '企业名称长度格式正确',
                'error'   => '企业名称应为由中英文、数字及-、_、()、()组成,应为4-40个字符',
            ),
        ),
        //真实姓名
        'realname' => array(
            //验证是否存在非法汉字
            'chinese'   => array(
                'code' => $chinaKeyword,
                'success' => '姓名正确',
                'error'   => '姓名存在非法汉字',
            ),
            //格式类型长度验证
            'number' => array(
                'code'    => '/^[\x{4e00}-\x{9fa5}]{2,10}$/u',
                'success' => '姓名格式正确',
                'error'   => '姓名格式不正确',
            ),
        ),
        //昵称
        'nickname' => array(
            //验证是否存在非法汉字
            'chinese'   => array(
                'code' => $chinaKeyword,
                'success' => '昵称正确',
                'error'   => '昵称存在非法汉字',
            ),
            //格式类型长度验证
            'number' => array(
                'code'    => '/.{3,20}/',
                'success' => '昵称格式与长度正确',
                'error'   => '昵称长度应2-6个字符',
            ), //*/
        ),
    );
    //将数组转换为一维,拿出KEY
    foreach ($type_array as $k => $v) {
        $type_array_if[] = $k;
    }
    //匹配是否存在该键
    if (in_array($keyword, $type_array_if)) {
        foreach ($type_array[$keyword] as $k => $v) {
            //汉字验证
            $string = str_replace($v['chinacode'], '*****', $string);
        }
        //存在该关键字
        foreach ($type_array[$keyword] as $k => $v) {
            //验证是否非汉字
            if ($k != 'chinese') {
                //正则比配
                $preg_match_chek = preg_match($v['code'], $string);
                if ($preg_match_chek == 0) {
                    //结果为0  代表存在不正确的字符
                    return array('status' => 0, 'result' => $v['error'], 'message' => $string);
                }
            }
        }
        //结果为1  代表字符完全正确
        return array('status' => 1, 'result' => $v['s本文出至:学新通博客网络博客uccess'], 'message' => $string);
    } else {
        //不存在该关键字
        return array('status' => 1, 'result' => '不存在此验证方法', 'keyword' => $keyword, 'message' => $string);
    }
}

本文出至:学新通技术网

标签: