За последние 24 часа нас посетили 16253 программиста и 1579 роботов. Сейчас ищет 1641 программист ...

Как избавиться от национальных символов?

Тема в разделе "Регулярные выражения", создана пользователем kit, 22 дек 2014.

  1. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Задача пропускать все символы латиницы и кириллицы, а так же цифры, всякие точки-тире и подобные небуквенноцифровые символы присутствующие на стандартной клавиатуре, пробелы и т.д. И самое главное не пропускать такие символы как: ž, ė, Á и т.д.
    Код (Text):
    1.  
    2. if (!preg_match("/[a-zA-Zа-яА-Я0-9]/i", $text)) echo "В форме использованы недопустимые символы!";
    Как модернизировать код? Или может есть другое решение?
    Заранее благодарю за помощь.
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    между 9 и ] вставляешь все символы (точки, тире, подчеркивания) что интересуют, в помощь такой ресурс.
    http://php-include.ru/regulyarnye-vyrazheniya-onlain

    Имей ввиду, что некоторые символы надо экранировать, например туже точку, вот так вот: \.
     
  3. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    ну вот:
    Код (Text):
    1.     if ($_GET[$key]&&!preg_match("/[a-zA-Zа-яА-Я0-9\#\*\@\_\.\,\:\?\!\-\/\+\(\)\$\s]/i", $value)) {$mest=$mest+1; $text.="В форме использованы недопустимые символы!<br>";}
    Но дело в том что данная регулярка не пропускает такие символы как {
    И благополучно пропускает такие символы как ž
    Почему?
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Небось опять достаточно эскейпа для бд...
     
  5. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Зачем а-я и А-Я если стоит i?
    Вбей в поиск regexp Ascii и там тонна примеров как разрешить символы из ascii по диапазону
     
  6. ciamon

    ciamon Новичок

    С нами с:
    19 дек 2014
    Сообщения:
    34
    Симпатии:
    0
    "$" и "^". Не?
     
  7. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    из тонны нарыл граммов 300, не больше...
    Для экспериментов написал:
    Код (Text):
    1. if (preg_match("/[0-9]/", $_GET['answer'])) echo "Ok! Symbol - ".$_GET['answer'];
    2. else echo "Error!";
    3. echo "
    4. <form name='form' method='get' action='test.php' >
    5.   <p><input type='text' name='answer'></p>
    6.   <p><input type='submit'></p>
    7.  </form>
    8. ";
    Не знаю почему, но шаблон [0-9] пропускает не только цифры, но и такие символы как ó.
    При вводе символа ó и нажатии на кнопку Отправить, в поисковой строке переменная answer=%26%23243%3B. Видимо из-за того что переменная содержит цифры, этот шаблон и пропускает ó.
    Так же пробовал вместо [0-9] ставить \x30-\x39, не помогает, все равно шаблон пропускает символ ó.
    Проблема осталась прежней: Как отфильтровать некирилические символы типа ó и пропускать русский и английские символы, цифры и некоторые точки, запятый, тире и подобные символы?
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1. $_GET['answer'] = (int) $_GET['answer']; //победа 
     
  9. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    а если вот так надо:
    Код (Text):
    1. preg_match("/[\xC0-\xFF\xA8\xB8\x41-\x5A\x61-\x7A0-9]/", $_GET['answer'])
    как тогда?
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ты хотел число. Вот тебе число
     
  11. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Выше задача стояла так:
    Чило это лишь частный случай задачи.
    В итоге надо что бы пропускало Щ!ф,N+W.1-2 и не пропускало Щ!ф,óN+W.1-2
     
  12. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  13. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    и чё?
    как эти символы помогут?

    Добавлено спустя 3 минуты 19 секунд:
    Мне надо отфильтровать $_GET['answer'] если эта переменная содержит некирилические символы типа ó, находящиеся в ЛЮБОМ месте. И пропускать $_GET['answer'], если эта переменная содержит русский и английские символы, цифры и некоторые точки, запятые, тире и подобные символы, находящиеся в ЛЮБОМ месте текста переменной.
     
  14. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    фильтровать, это значит удалить символы которые не подходят и всё остальное оставить?
     
  15. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    можно и так, главное не допустить всякие ó-подобные символы
     
  16. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну смотри, что я тебе рассказал:
    1. диапазон ascii
    2. начало и конец строки ^[0-9]$

    Теперь используй всё это вместе.

    Вот простой пример
    Код (PHP):
    1. if (mb_ereg_match("^[0-9a-zа-я]+$", "pâine", "i")) {
    2.     echo "Вхождение найдено.";
    3. } else {
    4.     echo "Вхождение не найдено.";
    5. } 
     
  17. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    denis01 спасибо за помощь и терпение!
    Код (Text):
    1. mb_ereg_match("^[\x20\x21\x23-\x26\x28-\x5F\x61-\x7E\xA8\xB8\xB9\xC0-\xFF]+$", $_GET['answer'], "i")
    работает!