标题: 正则验证类
mayongzhan
PHPEye Developer
Rank: 8Rank: 8


UID 136
精华 2
积分 20
帖子 41
翻译 18
原创 1
阅读权限 1
注册 2007-6-30
状态 离线
发表于 2007-11-26 13:07  资料  短消息  加为好友 
正则验证类

<!--下面附带测试-->
<?php
/**
* @name check.php
* @date Sat Nov 24 01:14:28 CST 2007
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/

/**
* 验证类
* @version 1.0
*/
class Check
{
        /**
         * 本类调用了我在以前写的计算string长度的函数,如修改或者使用本类请更新此文件
         * checkLong()
         * checkRight()
         */
       
       
        /**
         * 计算长度,也可以用于顺便验证是否为空验证
         *
         * @param string $string
         * @param int $length
         * @param int $length
         * @return boolean
         */
        public function checkLong($string, $end, $begin = 0)
        {
                $num = $this->countStr($string, 1);
                if ($num <= $end && $num >= $begin) {
                        return true;
                }
                else {
                        return false;
                }
        }/* end function checkLong */
       
        /**
     * 检查输入格式
     *
     * @param string $value
     * @param int $type
     * @return boolean
     * @author MyZ
     */
        public function checkRight($value, $type=7)
        {
                //$type = 1 是否为 纯 字母数字
                //$type = 2 是否为 纯 字母数字._
                //$type = 3 是否为 纯 字母
                //$type = 4 是否为 纯 小写字母
                //$type = 5 是否为 纯 大写字母
                //$type = 6 是否为 纯 数字
                //$type = 7 是否为 不带 /\'" (这几个为危险字符)
                if ($type == 1) {
                        $regular = '/[^a-z0-9]/i';
                }
                elseif ($type == 2) {
                        $regular = '/[^a-z0-9_.]/i';
                }
                elseif ($type == 3) {
                        $regular = '/[^a-z]/i';
                }
                elseif ($type == 4) {
                        $regular = '/[^a-z]/';
                }
                elseif ($type == 5) {
                        $regular = '/[^A-Z]/';
                }
                elseif ($type == 6) {
                        $regular = '/[^0-9]/';
                }
                elseif ($type == 7) {
                        $regular = '/[\\\\\'\"\/]/'; //   \\\\代表\ \/代表/ \'代表' \"代表"
                }
                else {
                        $regular = '/[\\\\// \'\"\/]/'; //   \\\\代表\ \/代表/ \'代表' \"代表"
                }
                if (!preg_match($regular, $value)) { //不匹配,证明是
                        return true;
                }
                else { //匹配,证明否
                        return false;
                }
        }/* end function checkRight */
       
        /**
         * 这个是我在以前写的计算string长度的函数,如修改或者使用本类请更新此文件
         *
         * @param string $str
         * @param int $handle
         * @param boolean $onlyCh
         * @return int
         */
        function countStr($str, $handle, $onlyCh = 0)
        {
                //$handle = 1 按照mb_strlen算 一个中文按照1个字算
                //$handle = 2 按照mb_strwidth算 一个中文按照2个字算
                //$handle = 3 按照strlen算 一个中文按照3个字算
                //$onlyCh = 1 只统计中文
                $length = strlen($str);
                if ($handle == 3 && $onlyCh == 0) {
                        return $length;
                }
                else {
                        $i = 0;
                        if ($onlyCh == 1) {
                                $k = 0;
                        }
                        else {
                                $k = 1;
                        }
                        while($i < $length) {
                                if(preg_match("/^[" . chr(0xa1) . "-" . chr(0xff) . "]+$/", $str[$i])) {
                                        $i += 3;
                                        $n += $handle;
                                }
                                else {
                                        $i += 1;
                                        $n += $k;
                                }
                        }
                        return $n;
                }
        }/* end function countStr */
       
}/* end class Check */

//测试
$test = new Check();
//测试中英文共6个字的string是否在5到N之间
for ($i=0;$i<20;$i++) {
        echo $test->checkLong("马永占MyZ",$i,5)?"yes{$i}<br />":"no{$i}<br />";
}
//测试各种非法字是否正确
$value = array("~`!@#$%^&*()-_=+{}[]:;,.<>?|",
                                "/",
                                "\\",
                                "/\\",
                                "'",
                                "\"",
                                "'\"",
                                ".7",
                                "_M",
                                "._7",
                                "7",
                                "77",
                                "777",
                                "7-7",
                                "M",
                                "y",
                                "MyZ",
                                "马永占",
                                "MyZ占777"
                                );
foreach ($value as $value) {
        echo $test->checkRight($value)?"<b>yes{$value}</b><br />":"no{$value}<br />";
}
?>





顶部
wps2000
新手上路
Rank: 1



UID 34
精华 0
积分 0
帖子 73
翻译 0
原创 0
阅读权限 10
注册 2007-5-20
状态 离线
发表于 2007-12-26 12:25  资料  短消息  加为好友 
楼主这么有兴趣帮忙把这些库全部完成了吧!(将ZF的Validate移植为Javascript的,改为了装饰器实现)

http://hi.baidu.com/zhangsilly/b ... d9d837c9955937.html

现在懒得写这些玩意儿了。





顶部
mayongzhan
PHPEye Developer
Rank: 8Rank: 8


UID 136
精华 2
积分 20
帖子 41
翻译 18
原创 1
阅读权限 1
注册 2007-6-30
状态 离线
发表于 2007-12-26 15:43  资料  短消息  加为好友 
哎...路慢慢...





顶部
gug365
新手上路
Rank: 1



UID 1465
精华 0
积分 0
帖子 6
翻译 0
原创 0
阅读权限 10
注册 2008-7-4
来自 上海
状态 离线
发表于 2008-8-5 23:45  资料  主页 短消息  加为好友  添加 gug365 为MSN好友 通过MSN和 gug365 交谈 QQ
楼主不错,顶下





顶部
gug365
新手上路
Rank: 1



UID 1465
精华 0
积分 0
帖子 6
翻译 0
原创 0
阅读权限 10
注册 2008-7-4
来自 上海
状态 离线
发表于 2008-8-5 23:46  资料  主页 短消息  加为好友  添加 gug365 为MSN好友 通过MSN和 gug365 交谈 QQ
楼主大家可以做个友链嘛





顶部
yhl_amerry
新手上路
Rank: 1



UID 1230
精华 0
积分 0
帖子 27
翻译 0
原创 0
阅读权限 10
注册 2008-5-26
状态 离线
发表于 2008-8-6 14:14  资料  短消息  加为好友 
顶下,好东西...

顶部
liulizhi
新手上路
Rank: 1



UID 833
精华 0
积分 0
帖子 17
翻译 0
原创 0
阅读权限 10
注册 2008-2-22
来自 上海
状态 离线

用支付宝求购
发表于 2008-8-13 17:26  资料  主页 短消息  加为好友  添加 liulizhi 为MSN好友 通过MSN和 liulizhi 交谈
楼主的努力,我们还是看在眼里的啦!

顶部
shitou254
新手上路
Rank: 1



UID 2277
精华 0
积分 0
帖子 6
翻译 0
原创 0
阅读权限 10
注册 2008-10-14
状态 离线
发表于 2008-10-15 14:02  资料  短消息  加为好友 
顶一个





myblog  : <a href="blog.webs08.net" >http://blog.webs08.net </a>
顶部
rzhome
新手上路
Rank: 1



UID 2059
精华 0
积分 0
帖子 8
翻译 0
原创 0
阅读权限 10
注册 2008-9-9
状态 离线
发表于 2008-11-4 17:10  资料  短消息  加为好友 
M标志的东西果然牛啊。





顶部
 


PHPEye开源社区


当前时区 GMT+8, 现在时间是 2008-12-3 10:56

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.031743 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - PHPEye开源社区 - Archiver