Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > regex Диапазон


Автор: vaxxxye 2.1.2016, 19:59

Прошу у вас помощи форумчане.Помогите пожалуйста с настройками диапазона regex под укр номера.
Вот сама схема - но сложновато как то получается
\([\d]{2,3}\)[ ]{0,2}[\d]{7}
[\d]{3}-[\d]{3}-[\d]{2}-[\d]{2}
[\d]{3}[- ()]{1}[\d]{3}-[\d]{2}-[\d]{2}
[\d]{3}\) [\d]{7}
[\d]{3}\) [\d]{3}[ -]{1}[\d]{2}[ -]{1}[\d]{2}[ -]{1}
[\d]{12}|[\d]{11}
[\d]{10}|[\d]{9}
[\d]{3}[- ()]{1}[\d]{3}[- ()]{1}[\d]{2}[- ()]{1}[\d]{2}
[\d]{3}[- ()]{1}[\d]{2}[- ()]{1}[\d]{2}[- ()]{1}[\d]{3}
[\d]{3}[- ()]{1}[\d]{2}[- ()]{1}[\d]{3}[- ()]{1}[\d]{2}
[\d]{3}[- ()]{1}[\d]{7}
[\d]{3}[- ()]{1}[\d]{4}[- ()]{1}[\d]{3}
[\d]{3}[- ()]{1}[\d]{3}[- ()]{1}[\d]{4}
Как правильно вправить в этот код что бы принимало номера с телефонами "+38..." по примеру +38(097)xxxxxxx ? хотя бы один регекс,исходя из этого рг?
Благодарю за помощь и с НГ вас.

Автор: Romikgy 2.1.2016, 22:27
примеры номеров накидать можете?

Автор: mailer 3.1.2016, 11:59
\+38\(?0\(?(?<code>\d{2})\)?(?<fg>\d{3})-?(?<sg>\d{2})-?(?<tg>\d{2})
Здесь четыре именованных группы:
    <code> - содержит код оператора (последние две цифры, поскольку код Украины в международном классификаторе не 38, а 380);
    <fg> - первые три цифры номера;
    <sg> - вторые две цифры номера;
    <tg> - последние две цифры номера.

Потом из этих групп собираете полный номер.
Матчится как минимум на следующие варианты ввода:

+380501234567
+38(097)1234567
+380(63)1234567
+380(66)123-4567
+380(50)123-45-67

И в качестве новогоднего подарка: 
  1.  Очень хороший онлайн RE тестер: https://regex101.com/
  2.  Синтаксический анализатор RE: http://regexper.com/ (не поддерживает именованные группы)

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/regex-Diapazon-id5688021bae2015ed078b4568#findElement_E7045_5688e2dbae2015b10bfb0723_0

Автор: vaxxxye 3.1.2016, 14:40
Цитата(Romikgy @ 2.1.2016,  22:27)
примеры номеров накидать можете?

Да конечно. Вот примеры номеров что бы проще было 
+38 098 307 89 53
+380 (50) 814-50-05
+380 (50) 81-45-005
+38 097-143-73-03
+38 (097)-143-73-03
+38 (097)14-37-303
ну это в общем.(Но смысла писать много нету,ибо схема выше "регулярок" работает по такому поиску символов только без учёта "38 и 380"). Мне хотя бы пару примеров по этой схеме что бы не нарушать структуру регулярок выше иначе перестает всё работать.А лучше довести до универсальности,думаю будет полезно пользователям.

Добавлено через 2 минуты и 24 секунды
Цитата(mailer @ 3.1.2016,  11:59)
\+38\(?0\(?(?<code>\d{2})\)?(?<fg>\d{3})-?(?<sg>\d{2})-?(?<tg>\d{2})
Здесь четыре именованных группы: 
    <code> - содержит код оператора (последние две цифры, поскольку код Украины в международном классификаторе не 38, а 380);
    <fg> - первые три цифры номера;
    <sg> - вторые две цифры номера;
    <tg> - последние две цифры номера.

Потом из этих групп собираете полный номер.
Матчится как минимум на следующие варианты ввода:

+380501234567
+38(097)1234567
+380(63)1234567
+380(66)123-4567
+380(50)123-45-67

И в качестве новогоднего подарка: 

  1.  Очень хороший онлайн RE тестер: https://regex101.com/
  2.  Синтаксический анализатор RE: http://regexper.com/ (не поддерживает именованные группы)

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/regex-Diapazon-id5688021bae2015ed078b4568#findElement_E7045_5688e2dbae2015b10bfb0723_0

К сожалению нарушив структуре регекса который выше,перестает работать всё) но все ровно благодарен за помощь и отзыв.Всё же лучше попробовать исходить из того что есть.

Автор: vaxxxye 3.1.2016, 17:02
от к примеру эта регулярка " [\d]{3}-[\d]{3}-[\d]{2}-[\d]{2} " отвечает за поиск такого стандарта символов к примеру 097-955-55-55.А как бы подогнать под стандарты с +380 и 38.?

Автор: Romikgy 3.1.2016, 20:00
Код

\+38[ ]?\(?0[\( ]?\(?\d{2}\)?[ -]?\d{2,3}[ -]?\d{2,3}[ -]?\d{2,3}

работает в ваших примерах

Автор: tzirechnoy 4.1.2016, 15:42
По-моему, это страдание хернёй какой-то. Хотите нормально? Приведите телефон к E.164, затем можно код страны позицыонно сравнивать.

Автор: Romikgy 5.1.2016, 13:48
Цитата(vaxxxye @  3.1.2016,  16:02 Найти цитируемый пост)
А как бы подогнать под стандарты с +380 и 38.? 

Код

(\+?38)?[ ]?\(?0[\( ]?\(?\d{2}\)?[ -]?\d{2,3}[ -]?\d{2,3}[ -]?\d{2,3}

Автор: vadiml 5.1.2016, 20:46
Зачистите номер телефона от всех нецифровых символов, а затем проверяйте корректность,

после, если надо, поставите сами скобки, дефисы и др. в положенных местах

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)