За последние 24 часа нас посетили 22676 программистов и 1601 робот. Сейчас ищут 855 программистов ...

Регулярки

Тема в разделе "PHP для новичков", создана пользователем askanim, 13 апр 2017.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Так сразу я в регулярках бомж я ваще не понимаю в них не фига...
    Кто может сказать что я делаю вот этой регуляркой..
    Код (Text):
    1. ^(8|+7)[-][\d]{3})[-]([\d]{3})[-]([\d]{2})[-]([\d]{2})$
    --- Добавлено ---
    А вообще я хочу проверить телефон
    8(964)436-02-43
    Вот такой вот но чё то не выходит не фига... :(:(:(
     
  2. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    совпадение с самого начала строки
    одно из двух, либо нет вообще
    один знак - или нет вообще
    3 цифры (digital)
    лишняя скобка, которая портит выражение
    было
    3 цифры выбираем в отдельное совпадение

    и т.д., суть не меняется.

    У тебя не хватает захвата скобок вокруг кода оператора, а скобки это спецсимволы - их экранировать надо.
     
    askanim нравится это.
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Код (Text):
    1. ^(8|+7)[-]?\([\d]{3})[-]?\([\d]{3})[-]?\([\d]{2})[-]?\([\d]{2})$
    Я в конец запутался, уже.... Конкретный абзац...
    --- Добавлено ---
    я раз 150 уже разнообразно попробовал но телефон не входит не в какую
    8(964)436-02-43
    --- Добавлено ---
    PHP:
    1. $value = '8';
    2.                 if(preg_match('^(8|+7)', $value)):
    3.                     $result['error']['regular'] = 'Да я прошёл';
    4.                 else:
    5.                     $result['error']['regular'] = 'нет я не прошёл';
    6.                 endif;
    И данное выражение не хрина не срабатывает какого ?
    --- Добавлено ---
    PHP:
    1. $value = '1';
    2.                 if(preg_match('^[0-9]{1}$', $value)):
    3.                     $result['error']['regular'] = 'Да я прошёл';
    4.                 else:
    5.                     $result['error']['regular'] = 'нет я не прошёл';
    6.                 endif;
    И это не срабатывает что не так делаю Оо ?????
    --- Добавлено ---
    @[vs] Помоги плиз не пойму что не так...
    --- Добавлено ---
    PHP:
    1. $value = 'AGHFHRTHRTHRTHRHT';
    2.                 if(preg_match('^(\[A-B]{0,5}\)', $value)):
    3.                     $result['error']['regular'] = 'Да я прошёл';
    4.                 else:
    5.                     $result['error']['regular'] = 'нет я не прошёл';
    6.                 endif;
    И так тоже я не прошёл ....
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @askanim, обычно с регуляркам помогает @Emilien.
    Пробовал тут подобрать?
     
    askanim нравится это.
  5. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @askanim а выражения нельзя прям так записывать. Должен быть разграничитель. Например так:
    Код (Text):
    1. "/[A-Z]/"
    Здесь слеш разграничитель. После закрывающего можно писать модификаторы (буквы U, i, s...)
     
    askanim нравится это.
  6. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    ЛОООООООООООООООЛ
    --- Добавлено ---
    @[vs] Я уже сравнил чем отличается моё регулярное вырожение от того что в доке... Я блин даже не сразу в чухнул что проблема в "/pattern regular/"
    Абзац я то смотрел регулярки по python учебнику там внятней про них написано :D
    PHP:
    1. preg_match('/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/', $value)
    Всё вот так работает оная для телефонов :D
     
  7. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Есть хороший сайт с паттернами почти на все случаи, тыц. Мб что подойдет.
     
    askanim нравится это.
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    А вот так хрен :D
    Код (Text):
    1. preg_match('^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$', $value)
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @askanim, открывающий и закрывающий символ забыл.
     
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Данная что я скинул подходит для номеров Цитирую автора:
    "
    Ориентировано на российские мобильные + городские с кодом из 3 цифр (например, Москва).

    Зеленый свет для:
    +79261234567
    89261234567
    79261234567
    +7 926 123 45 67
    8(926)123-45-67
    123-45-67
    9261234567
    79261234567
    (495)1234567
    (495) 123 45 67
    89261234567
    8-926-123-45-67
    8 927 1234 234
    8 927 12 12 888
    8 927 12 555 12
    8 927 123 8 123
    "
    взял регулярку отсюда
    https://habrahabr.ru/post/110731/
    --- Добавлено ---
    @mahmuzar я не забыл я не знал :D Я же говорю бомж в регулярках. :D
    --- Добавлено ---
    А вообще надо бы потренироваться их писать как нибудь сесть день уделить потыкаться :D
    --- Добавлено ---
    Спасибо всем за то что откликнулись :)
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Я так же. Несколько раз брался, и так не до конца.
    PHP:
    1. $text = '+7(964)436-02-43';
    2.    echo preg_match("/(8|\+7)\([\d]{3}\)([\d]{3})(\-)([\d]{2})(\-)([\d]{2})/", $text);
    Вот переделал твою регулярку, вроде есть совпадение.
    --- Добавлено ---
    Если кроме номера ничего не ожидается логично было бы поставить символы которые изначально у тебя стояли ^ начало и $-конец.
     
    [vs] и askanim нравится это.