1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Кириллица в PCRE, как?

Тема в разделе "Софт", создана пользователем хочу_вот_сказать, 28.07.08.

  1. хочу_вот_сказать

    хочу_вот_сказать Активный участник

    8.402
    1
    Есть формочка для Ф.И.О., корректность пользовательского ввода в которую необходимо проверить.
    Регулярка такая:

    На домашнем компе работает. На сервере нет. Просидел всю ночь так и не заставил работать ((

    пробовал так же использовать 16ричные коды букаф кириллических:


    "Путин В. В." не проходит проверку на такой регулярке ((

    чего делать?
     
  2. dj

    dj Активный участник

    892
    2
    кодировка?
     
  3. WireRat

    WireRat Участник

    262
    0
    а если через Юникод ?
    [\u0410-\u044F]+ - многа букофф от "А" до "я"

    [\u0410-\u044F]{2,30}\s?[\u0410-\u044F]\.\s?[\u0410-\u044F]\. - матчит "Путин С. В."
     
  4. OpenBoy

    OpenBoy Активный участник

    21.670
    0
    Если все это делаеться под *nix то нужно сначала проверить ссистемные установки локали командои locale - в результате должно выити нечто вроде LANG=ru_RU.KOI8-R (UTF-8, CP1251)
    Если стоит чтото другое, то перед выпонением скрипта, установи как нибуть локаль (может в ПХП есть функция для этого, если нет, тогда можно сделать вот так: пример на perl
    system('LANG=ru_RU.KOI8-R; export LANG');
    То есть - воспользуися системным вызовом.
    );

    Может я и не прав, но выглядит логично вроде.
     
  5. хочу_вот_сказать

    хочу_вот_сказать Активный участник

    8.402
    1
    Wire Rat, угу... еслиб не весь огроменный ресурс был на цп1251 не пришлось бы заморачиваться. тупо написал #[А-я]#u ну и радуешься :) Путин В. В. не проходит предложенную регулярку ((

    if (empty($this->errors['fio']) && !preg_match('/[\u0410-\u044F]{2,30}\s?[\u0410-\u044F]\.\s?[\u0410-\u044F]\./', trim(htmlspecialchars($_POST['fio']))))
    $this->errors['fio'] = $this->lang->frontend['fio_error'];

    OpenBoy, ага, есть - setlocale(), пользовать пробовал, но, похоже, на сервере цп1251 нема ((
    перед всей инициализацией системы запхал:
    setlocale(LC_ALL, array("ru_RU","rus_RUS","ru_RU.KOI8-R","ru_RU.CP1251"));
    к-й будет перебирать локали из массива, пока не дойдёт до существующей

    эт не шаред хостинг, это выделенный сервак, если есть какой-либо путь что-либо поставить\настроить -- это без проблем :)
     
    Последнее редактирование: 28.07.08
  6. OpenBoy

    OpenBoy Активный участник

    21.670
    0

    А на чем сервер? (ОС) Возможно там есть какие то нюансы руссификации.
    У меня был скрипт, уж непомню что делал но pcre использовал, и русские буковки понимал...
     
  7. хочу_вот_сказать

    хочу_вот_сказать Активный участник

    8.402
    1
    OpenBoy, Cent OS 5.1 ((
     
  8. хочу_вот_сказать

    хочу_вот_сказать Активный участник

    8.402
    1
    поставил локаль cp1251 и всё заработало :p
     
  9. OpenBoy

    OpenBoy Активный участник

    21.670
    0
    вот это да... ))) Чертподери. КОГДА??? ДОКОЛЕ БУДЕТ ЗАСИЛЬЕ КОДИРОВОК??