validator (Валидация данных)

Тема в разделе ".:: Готовые решения", создана пользователем Slayter, 24 ноя 2007.

Статус темы:
Закрыта.
  1. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    PHP:
    <?php
    class validator {
        
        
        private 
    $params = array();
        private 
    $errors = array();
        
        
        function 
    __construct() {
            
    $this->params['max_len']['email'] = 50;
            
    $this->params['min_len']['email'] = 10;
            
    $this->params['max_len']['url']   = 14;
            
    $this->params['min_len']['url']   = 5;
            
    $this->params['max_len']['alphanum'] = 255;
            
    $this->params['min_len']['alphanum'] = 1;
            
    $this->params['max_len']['alpha'] = 255;
            
    $this->params['min_len']['alpha'] = 1;
            
    $this->params['max_len']['numeric'] = 30;
            
    $this->params['min_len']['numeric'] = 1;
            
    $this->params['max_len']['integer'] = 20;
            
    $this->params['min_len']['integer'] = 1;
            
    $this->params['max_len']['login'] = 4;
            
    $this->params['min_len']['login'] = 15;
            
            
    $this->errors['email']    = 'Email некоректный или неукладывается в отведенное на него кол-во символов';
            
    $this->errors['url']      = 'URL некоректный или неукладывается в отведенное на него кол-во символов';
            
    $this->errors['alphanum'] = 'Буквы и цифры не прошли проверки на свою цифробуквенность или неукладываются в отведенное на них кол-во символов';
            
    $this->errors['alpha']    = 'Буквы не прошли проверки на свою буквенность или неукладываются в отведенное на них кол-во символов';
            
    $this->errors['numeric']  = 'Число не прошло проверки на свою численность или неукладываются в отведенное на него кол-во символов';
            
    $this->errors['integer']  = 'Цифра не прошла проверки на свою целочисленность или неукладываются в отведенное на неё кол-во символов';
            
    $this->errors['equal_to'] = 'Не тоже самое';
        }
        
        public function 
    provider($type 'alphanum'$data$len NULL$equal_len NULL) {
            if (
    method_exists($this$type)) {
                if (
    $type == 'equal_to') {
                    if (
    $this->$type($data$len$equal_len)) {
                        return 
    true;
                    } else {
                        return 
    false;
                    }
                } else {
                    if (!empty(
    $len) && is_array($len)) {
                        if (
    $this->$type($data$len)) {
                            return 
    true;
                        } else {
                            return 
    false;
                        }
                    } else {
                        if (
    $this->$type($data)) {
                            return 
    true;
                        } else {
                            return 
    false;
                        }
                    }
                }
            }
        }
        
        public function 
    login($login$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['login'];
                
    $max $this->params['max_len']['login'];
            }
            if (
    preg_match('/^([a-zA-Z0-9\$\_\&\@\#\№]){0,}$/'$login) && $this->check_length($login$min$max)) {
                return 
    true;
            } else {
                return 
    false;
            }
        }
        
        public function 
    email($email$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['email'];
                
    $max $this->params['max_len']['email'];
            }
            if (isset(
    $email) && preg_match("/^([a-zA-Z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}$/i",$email) && $this->check_length($email$min$max)) {
                return 
    true;
            } else {
                return 
    false;
            }
        }
        
        public function 
    url($url$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['url'];
                
    $max $this->params['max_len']['url'];
            }
            if (isset(
    $url) && preg_match("/^((http|https|ftp):\/\/([a-zA-Z0-9-])+(\.([a-zA-Z0-9-])+)*(\.([a-zA-Z0-9~\/]){2,6}+)+)?$/",$url) && $this->check_length($url$min$max)) {
                return 
    true;
            } else {
                return 
    false;
            }        
        }
        
        public function 
    captcha($first_arg) {
            if (
    md5(md5(strtoupper($first_arg))) == $_SESSION['captcha']) {
                return 
    true;
            } else {
                return 
    false;
            }
        }
        
        public function 
    equal_to($first$second$len) {
            
    $min $len[0];
            
    $max $len[1];
            
    $first_len  strlen($first);
            
    $second_len strlen($second);
            if (!
    is_array($first) && !is_array($second)) {
                if (
    $first === $second && $this->check_length($first,$min,$max)) {
                    return 
    true;
                } else {
                    return 
    false;
                }
            } elseif ((
    is_array($first) OR !is_array($second)) || (!is_array($first) OR is_array($second)) || (count($first) != count($second))) {
                return 
    false;
            } else {
                
    $temp = array();
                
    $temp array_diff($first$second);
                if (empty(
    $temp)) {
                    return 
    true;
                } else {
                    return 
    false;
                }
            }
        }
        
        public function 
    alphanum($alphanum$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['alphanum'];
                
    $max $this->params['max_len']['alphanum'];
            }
            if (isset(
    $alphanum) && preg_match('/^[[:alnum:]]+$/'$alphanum) && $this->check_length($alphanum$min$max))    {
                return 
    true;
            } else {
                return 
    false;
            }
        }

        public function 
    alpha($alpha$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['alpha'];
                
    $max $this->params['max_len']['alpha'];
            }
            if (isset(
    $alpha) && preg_match('/^[[:alpha:]]+$/i'$alpha) && $this->check_length($alpha$min$max))    {
                return 
    true;
            } else {
                return 
    false;
            }
        }

        public function 
    numeric($numeric$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['numeric'];
                
    $max $this->params['max_len']['numeric'];
            }
            if (isset(
    $numeric) && is_numeric($numeric) && $this->check_length($numeric$min$max))    {
                return 
    true;
            } else {
                return 
    false;
            }
        }
        
        public function 
    integer($integer$len NULL) {
            if (
    is_array($len)) {
                
    $min $len[0];
                
    $max $len[1];
            } else {
                
    $min $this->params['min_len']['integer'];
                
    $max $this->params['max_len']['integer'];
            }
            if (isset(
    $integer) && is_int($integer) && $this->check_length($integer$min$max))    {
                return 
    true;
            } else {
                return 
    false;
            }
        }
        
        public function 
    phone($phone) {
            if ( !
    preg_match('^\+([0-9]{1,2})\s\(([0-9]{2,4})\)\s([0-9]{6,9})^'$phone) &&
                 !
    preg_match('^\+([0-9]{1,2})\s\(([0-9]{2,4})\)\s([0-9]{3})\-([0-9]{2})\-[(0-9){2}]^'$phone) &&
                 !
    preg_match('^([0-9]{3})\-([0-9]{3})^'$phone) &&
                 !
    preg_match('^([0-9]{2})\-([0-9]{2})\-([0-9]{2})^'$phone) ){
                return 
    false;
            } else {
                return 
    true;
            }
        }
        
        public function 
    check_length($var$min$max) {
            
    $varlen strlen($var);
            if (
    $varlen >= $min && $varlen <= $max) {
                return 
    true;
            } else {
                return 
    false;
            }
        }
    }
    ?>

    Examples:
    PHP:
    <?php
    $validator 
    = new validator();
    ?>

    <h2>Validator test</h2>
    <p>
        <b>Email test</b><br />
        Email: te@me, result: <?=$validator->provider('email''te@me')?><br />
        Email: te@me.ru[9,20], result: <?=$validator->provider('email''te@me', array(9,20))?><br />
        Email: te@me.ru[5,20], result: <?=$validator->provider('email''te@me.ru', array(5,20))?><br />
        <hr>
        <b>URL test</b><br />
        Url: test1.ru, result: <?=$validator->provider('url''test1.ru')?><br />
        Url: http://test1.ru/[17,20], result: <?=$validator->provider('url''http://test1.ru/', array(17,20))?><br />
        Url: http://test1.ru/[5,30], result: <?=$validator->provider('url''http://test1.ru/', array(5,30))?><br />
        Url: https://test1.ru/[5,30], result: <?=$validator->provider('url''https://test1.ru/', array(5,30))?><br />
        Url: ftp://test1.ru/[5,30], result: <?=$validator->provider('url''ftp://test1.ru/', array(5,30))?><br />
        <hr>
        <b>EqualTo</b><br />
        Equal_to: password:qwerty, result: <?=$validator->provider('equal_to''password''qwerty')?><br />
        Equal_to: password:password, result: <?=$validator->provider('equal_to''password''password')?><br />
        <hr>
        <b>Alphanum</b><br />
        Alpha-numeric: @qwerty123, result: <?=$validator->provider('alphanum''@qwerty123')?><br />
        Alpha-numeruc: qwerty123, result: <?=$validator->provider('alphanum''qwerty123')?><br />
        <hr>
        <b>Alpha</b><br />
        Alpha: @qwerty123, result: <?=$validator->provider('alpha''@qwerty123')?><br />
        Alpha: qwerty, result: <?=$validator->provider('alpha''qwerty')?><br />
        <hr>
        <b>Numeric</b><br />
        Alpha: qwerty-12.3, result: <?=$validator->provider('numeric''qwerty-12.3')?><br />
        Alpha: -12.3, result: <?=$validator->provider('numeric''-12.3')?><br />
        <hr>
        <b>Integer</b><br />
        Alpha: -12.3, result: <?=$validator->provider('integer', -12.3)?><br />
        Alpha: -123, result: <?=$validator->provider('integer', -123)?><br />
    </p>
     
    AleksWhite, picasik, antiadmin и ещё 1-му нравится это.
  2. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Slayter ты меня конечно извини, но что это за Юхня?
    Если ты размещаешь class validator то почему нет комментов к классу и общего описания.
    Вообщем читай внимательно Цель раздела - http://www.nulled.ws/showthread.php?t=37715 .
    У меня такое ощущение, что сначала пишем, а потом читаем правила раздела. Давай придерживаться структурированности.
     
  3. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    описание вполне понятно из примеров и названия топика :smmne:


    что я размещаю и как - это моё дело, а никак не твоё, доча.
     
  4. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Название топика будет понятно только программеру, если ты уважаешь начинающих программеров, то не нужно делать тему из одного слова. С тем же успехом я могу назвать тему: Validcssreload - Ну и что тебе из это понятно, правильно ничего!

    Что ты размещаешь - остальные читают, и если ты размещаешь юхню, то и читать ее никто не будет и разбираться в твоих кракозяблах.

    С уважением к тебе скажу. да.. да это твоё дело, но не забывай, что мы все здесь находимся не для набирания пустых постов, я для помощи другим.
    Если не уважаешь других пользователей, значит не уважаешь себя. ИМХО :mad:
     
  5. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    какое набирание постов? о чём ты? дет.сад ромашка :D Zer кинул ссылку на раздел и предложил там отписать чо-нить. Отписал. Если уж из из темы непонятно название - то уж из примеров точно понятно. нет времени на описания и т.п. выдаю то что написал и использую у себя. кому надо тот разберётся или спросит.
     
  6. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Zer знает что он пишет, по крайней мере по моему общению с ним я знаю - он туфту не пишет. И если просил отписать, то не чо-нить, как ты пишешь, а полезную инфу желательно с комментами. Так вот когда видишь код без описания, даже разбираться не хочется, это тоже самое что и дописывание чужих двигов, лучше написать что-то своё с нуля... ИМХО
     
  7. Zeratul

    Zeratul Создатель

    Регистр.:
    17 мар 2006
    Сообщения:
    1.322
    Симпатии:
    3.857
    Думаю стоит собирать такие классы без комментариев В одну тему.. по автору.. :-]

    Slayter классно пишет.. но описание не помешало бы..

    2RALF Раздел пока молод.. лучше попости свои наработки, а не разводи оффтоп :)
     
  8. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Валидация данных на наличие скриптов

    PHP:
    <?php

    class validate
    {
        var 
    $unsafe_html;    // array of REGEXPs for validate
        
    var $is_valid;        // flag of data-validation
        
        
    function __construct()
        {
            
    $this->unsafe_html = array();
            
            
    // Составляем список валидирующих регулярных выражений
            
    $this->unsafe_html[] = '!javascript\s*:!is';
            
    $this->unsafe_html[] = '!vbscri?pt\s*:!is';
            
    $this->unsafe_html[] = '!<\s*embed.*swf!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onabort\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onblur\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onchange\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onfocus\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onmouseout\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onmouseover\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onload\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onreset\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onselect\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onsubmit\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onunload\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onerror\s*=!is';
            
    $this->unsafe_html[] = '!<[^>]*[^a-z]onclick\s*=!is';
        }
        
        function 
    validation($data)
        {    
            
    // Объявляем массив регулярных выражений, которые не соответствуют политике безопасности
            
    $unsafe_code = array();
            
            foreach (
    $this->unsafe_html as $match)
            {    if(
    preg_match($match$data$matches))
                {    
    $unsafe_code[] = $match;
                }
            }
            
    // если размер массива больше нуля - отдаем наличие ошибки
            
    $this->is_valid=(count($unsafe_code))?false:true;
        }
    }
    ?>

    Использование:

    PHP:
    <?php
    $validator 
    = new validate();
    $validator->validation($some_string);

    // Получаем результат валидации 
    $validator->is_valid;
    ?>
     
    AleksWhite нравится это.
  9. REALiSTiC

    REALiSTiC

    Регистр.:
    30 мар 2006
    Сообщения:
    354
    Симпатии:
    126
    Slayter, зачод!

    PS: Будет работать только в PHP5.
     
  10. Zeratul

    Zeratul Создатель

    Регистр.:
    17 мар 2006
    Сообщения:
    1.322
    Симпатии:
    3.857
    Реалистиг не зачот.. не флуди в теме :)

    Вообще класс у меня для валидации всеже свой(позже засвечу), и заточен под определенные скрипты.

    Ну и не стоит писать что будет работать только в php5..
    PHP:
    __construct
    Это же и так ясно ;)
     
Статус темы:
Закрыта.