UTF-8 и Регулярные выражения

Тема в разделе "PHP Pro", создана пользователем CrashX, 19 май 2010.

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

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    и так проблема проста как 3 копейки
    вот рабочий пример для фильтрования всего кроме печатного все остальное отсекаю, это только для UTF для ASCII все намного проще
    ЗЫ регулярные выражения типа а-я и a-z не расматриваю вовсе (объясняю почему да потому что мне нужно более 2 кодировок, а непечатные символы нужно удалять!)
    PHP:
     function string($var) {
         
    $this->result[$var] = (string) preg_replace('
                                      /(?>[\x09\x0A\x0D\x20-\x7E]           # ASCII
                                               
                                      |[\xC2-\xDF]((?![\x80-\xBF])      # non-overlong 2-byte
                                      |[\x80-\xBF]{2,})
                                      |\xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs
                                      |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
                                      |\xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates
                                      |\xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
                                      |[\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
                                      |\xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
                                     )*
                                    /sx'
                
    ,'',$this->source[$var]);
    // php 5.3
    //$this->result[$var] = (string) filter_var($this->source[$var],FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW);
      
    }
    а теперь нужно подогнать еще несколько правил
    не могу пока... нужно правило XML такое же что бы вырезало все кроме валидных данных, так же на чек маил

    вот эти функции под ascii, мне бы теперь отсюда выразать все кроме нужного как тут расширить диапозон до последнего символа
    PHP:
    function number($var) {
        
    $this->result[$var] = (int) preg_replace('#[\x0-\x2F\x3A-\xFF]#','',$this->source[$var]);
    //$this->result[$var] = (int) filter_var($this->source[$var],FILTER_SANITIZE_NUMBER_INT);
      
    }
      function 
    email($var) {
        
    $this->result[$var] = (string) preg_replace('#[\x0-\x2C\x2F\x3A-\x3F\x5B-\x60\x7B-\xFF]#','',$this->source[$var]);
    //$this->result[$var] = (string) filter_var($this->source[$var],FILTER_SANITIZE_EMAIL);
      
    }
    Добавлено через 2 минуты
    тест
    первой функции
    Код:
    Array
    (
        [ulogin] => ыфв
        [upassword] => ыя↓৾☺ƹƸЪв(*№Ю☼ᘌ
        [upassword_repeated] => ыя↓৾☺ƹƸЪв(*№Ю☼ᘌ
        [uemail] => qwe@qwee.we
        [uname] => ыя↓৾☺ƹƸЪв(*№Ю☼ᘌ
        [usurname] => qweqwe
        [captcha] => 170231
    )
    
    Array
    (
        [id] => 
        [gid] => 
        [ulogin] => ыфв
        [upassword] => ыяƹƸЪвЮ
        [uemail] => qwe@qwee.we
        [unick] => 
        [uname] => ыяƹƸЪвЮ
        [usurname] => 
        [ulocation] => 
        [ulanguage] => 
        [utemplate] => 
        [uregister] => 2010-05-19 07:51:59
        [uvisit] => 2010-05-19 07:51:59
     
  2. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    помогите перевести выражение для preg_replase

    PHP:
    preg_match_all('/
    (?> \r\n   # переносы строк
    | &(?> [a-zA-Z][a-zA-Z\d]+| \#(?> \d{1,4}| x[\da-fA-F]{2,4}));  # html сущности (< > & ")
    | [\x09\x0A\x0D\x20-\x7E]           # ASCII
    | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
    |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs
    | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
    |  \xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates
    |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
    | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
    |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
    )
    /sx'
    $s$m);
     
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    кто как чистит код регулярками вообще?
    для utf соответственно

    Добавлено через 30 минут
    пошел по пути наименьшего сопротивления
    все символы всех алфавитов есть)

    результат

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