ereg + регулярка + символы []

Тема в разделе "PHP", создана пользователем Горбушка, 20 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.111
    Симпатии:
    2.130
    Имеется вот такое условие:
    PHP:
    if( (! ereg'^[-!$%\'*+\\./0-9=?A-Z^_`a-z{|}~]+'$text ))) die
    Смысл: если найдены в $text символы не из регулярки - скрипт останавливается.
    Нужно: не останавливать скрипт, если в нём есть символы [].

    Как добавить в регулярку ещё и []? Если ставлю по общей инструкции в начало выражения, происходит ошибка:
    PHP:
    ^[][-!$%\'*+\\./0-9=?A-Z^_`a-z{|}~]+
    Помогите, плиз.:thenks:
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    экранировать надо
    или через preg_quote или просто ставить слэш \

    \[\]\{\}\$\?
     
  3. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.111
    Симпатии:
    2.130
    Я с регулярками даже на "Вы" не общался никогда...
    Можно написать готовое решение проблемы, как заменить или экранировать?
    PHP:
    if( (! ereg'^[\]-!$%\'*+\\./0-9=?A-Z^_`a-z{|}~]+'$text ))) die 
    Вызывает ошибку...
     
  4. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    PHP:
    if( (!preg_match'%\^\[\]-!\$\%\'*\+\\./[0-9]=\?[A-Z]_`[a-z]\{\|\}%'$text ))) die;
    какая-то странная проверка..мб расскажете что необходимо проверить, а там возможно предложим более лучший вариант чем регулярка
     
    Горбушка нравится это.
  5. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.111
    Симпатии:
    2.130
    Без проблем.
    Это проверка проверяет регистрируемый ник для игры CS 1.6
    Цель: дать регить только определённые символы. Необходимо исключить #&<> и русские буквы, в принципе, но на влякий случай, вырезаем всё не из списка, дабы не вводились символы UTF-8, такие как китайский алфовит и т.д.

    Если предложите другой вариант - буду рад.
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    PHP:
    if( (!preg_match'%^[a-z0-9]+$%iD'$text ))) die;
    итого, регулярка пропускает только те ники, которые состоят из букв английского алфавита и цифры, больше никого
     
    Горбушка нравится это.
  7. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.111
    Симпатии:
    2.130
    Не всё так просто. Порезать до A-Za-z0-9 я и сам смог8, но свойства CS в том, что юзеры любят использовать кучу спец символов...

    R*Fatallist
    [Masters.pro][ZOMBIE] Dinaz
    watcher<3 mix^^
    Это для примера - вытащил последних 3х из бана.

    Соответственно надо позволять регить кучу символов, но юникс не любит символы <>#& - их надо вырезать 100% + ещё несколько лишних...

    Кстати, чем preg_match лучше ereg?
     
  8. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    PHP:
    if(preg_match('~[^'.preg_quote('список разрешённых символов''~').']~'$text)) die();
    Можно убрать "^" и писать список запрещённых символов.

    preg_match лучше ereg хотя бы тем, что он есть в поставке PHP6, а ereg'и исключены. Ещё много разных отличий.
     
    Горбушка нравится это.
  9. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.111
    Симпатии:
    2.130
    Parse error: syntax error, unexpected T_VARIABLE in /var/www/virtual/***/htdocs/engine/modules/register.php on line 43
    Где я лоханулся?
     
  10. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Копировать не пробовал?

    У тебя что то со скобками, открывающих 3, закрывающих 2.
     
    Горбушка нравится это.
Статус темы:
Закрыта.