PHPEye开源社区 » PHP技术讨论区 » 正则验证类
《Programming PHP》第二版上市
2007-11-26 13:07 mayongzhan
正则验证类

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

/**
* 验证类
* @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 />";
}
?>

2007-12-26 12:25 wps2000
楼主这么有兴趣帮忙把这些库全部完成了吧!(将ZF的Validate移植为Javascript的,改为了装饰器实现)

[url]http://hi.baidu.com/zhangsilly/blog/item/3f625e2432d9d837c9955937.html[/url]

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

2007-12-26 15:43 mayongzhan
哎...路慢慢...

2008-8-5 23:45 gug365
楼主不错,顶下:victory:

2008-8-5 23:46 gug365
楼主大家可以做个友链嘛

2008-8-6 14:14 yhl_amerry
顶下,好东西...

2008-8-13 17:26 liulizhi
楼主的努力,我们还是看在眼里的啦!

页: [1]
查看完整版本: 正则验证类


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.