За последние 24 часа нас посетили 22476 программистов и 1008 роботов. Сейчас ищут 683 программиста ...

все пропускает ((

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

  1. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Надо отфильтровать на серваке паспортные данные - т.к. в таблицу они вбиты некорректно то проверку приходится делать только на цифры и пробел - делаю вот так
    Код (PHP):
    1. $pattern = '/[0-9 ]/';
    2.  
    3. if (preg_match($pattern, $_POST['ser']." ".$_POST['nomer'])) {
    4.     die("пропустил");
    5. }
    6. else die("не пропустил");
    в результате пропускается всеее и текст тоже, а самое интересное - что на онлайн тесте - регулярка срабатывает правильно в чем блин тут подвох ?

    Добавлено спустя 16 минут 33 секунды:
    убейте меня .. вот так нормально работает
    $pattern = '/([0-9]{2} [0-9]{2})\s[0-9]{6}/';
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Не силен, но:
    /[0-9 ]/ - ты задаешь поиск чисел, они находятся )
    '/([0-9]{2} [0-9]{2})\s[0-9]{6}/' - тут четкий паттерн 00 00 000000, что и дает правильный результат.
    Кстати, \s тут зачем?
     
  3. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    пробел ...
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    /^[0-9 ]+$/ вот так тоже будет работать, т.е. от начала до конца строки только цифры и пробел. Но твой последний вариант имхо все же правильнее для паспорта.

    пробел это пробел, а \s - это ещё и таб и перевод строки.
     
  5. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    уговорил.. поменял на пробел =)

    Добавлено спустя 29 секунд:
    теперь оно выглядит вот так
    /([0-9]{2} [0-9]{2}) [0-9]{6}/
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    /[^0-9\s]/i
     
  7. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    боюсь вы предлагаете антицифры ((
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    поиграй:
    Код (PHP):
    1. if (preg_match("/[^0-9\s]/i", "78568 fdhg") == FALSE) {
    2. echo ":)";
    3. } else {
    4. echo ":(";
    5. } 
    25224353
    435345dgdsf
    (пробел)4353454
    █536546█
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    MAN_IFE_ST, зачем ты сравниваешь с FALSE ? =(
    Не надо.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    соглашусь, сравнивать с TRUE или !TRUE тоже не стоит.
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    правильный паттерн
    Код (Text):
    1. /^[\d\s]+$/
    означает, что от начала до конца строки - только цифры и/или пробелы.