За последние 24 часа нас посетили 18873 программиста и 1615 роботов. Сейчас ищут 664 программиста ...

почему один и тот же регэксп по-разному работает

Тема в разделе "Регулярные выражения", создана пользователем andrey1986, 12 июл 2010.

  1. andrey1986

    andrey1986 Активный пользователь

    С нами с:
    5 окт 2009
    Сообщения:
    17
    Симпатии:
    0
    PHP:
    1. if(!preg_match('/^[-_\s\.0-9a-zа-я\"]{1,30}$/i',$user))
    отлично ищет совпадения слов в кавычках, например если ввести слово "Бетфор" . Проверял у себя дома на домашнем компе
    Прописал этот же регэксп на тестовом сервере на работе - теперь по словам в кавычках совпадения не отрабатываются. На какие настройки обратить внимание?
    на работе ОС freebsd 8.0, php5-pcre-5.2.10, дома тоже php5, подверсию не помню
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    дело в локали. гуглите setlocale+preg_match
    или пользуйтесь уникодной кодировкой, но там свои "особенности"
     
  3. andrey1986

    andrey1986 Активный пользователь

    С нами с:
    5 окт 2009
    Сообщения:
    17
    Симпатии:
    0
    русские символы в скрипте набраны в кодировке ru_RU.CP1251.
    также сделал еще в скрипте setlocale(LC_ALL, 'ru_RU.CP1251');
    В инете по этому запросу setlocale+preg_match описывается ситуация когда поиск не идет по маленьким и заглавным русским буквам, у меня же это работает. Может еще какая заковыка есть?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    не факт , что на вашем тестовом сервере локаль надо делать именно так. вот фрагмент из кода форума punbb:
    PHP:
    1.  
    2. // Determine what locale to use
    3. switch (PHP_OS)
    4. {
    5.     case 'WINNT':
    6.     case 'WIN32':
    7.         $locale = 'russian';
    8.         break;
    9.  
    10.     case 'FreeBSD':
    11.     case 'NetBSD':
    12.     case 'OpenBSD':
    13.         $locale = 'ru_RU.CP1251';
    14.         break;
    15.  
    16.     default:
    17.         $locale = 'ru_RU';
    18.         break;
    19. }
    20.  
    21. // Attempt to set the locale
    22. setlocale(LC_CTYPE, $locale);
    23.  
    не тестировал. как говорится, почем взял, потом и продаю