2015-06-08 3 views
1

у меня есть это регулярное выражение, которое соответствует большинству телефонных номеров:персонализация RegExp для международных телефонных номеров

^((\+|00)[1-9]{1,3})?(\-| {0,1})?(([\d]{0,3})(\-| {0,1})?([\d]{5,11})){1}$ 

Это прекрасно с номерами телефонов, как:

  • +39123456789
  • + 39- 123-456789
  • +39 123 456789

И через комбинации пробелов, дефисов и без каких-либо пространств, таких как:

  • +39 123456789
  • + 39-123 456789

Теперь мне нужно две вещи:

  1. Разрешите использовать точку в качестве разделителя, например:
    • +39.123.456789
    • +39 123,456789
    • + 39-123.456789
  2. Не допускать более одного разделителя между номерами. На данный момент, регулярное выражение позволяет плохо отформатирован строку, например:

    • + 39- 123456789
+1

4 мин. Поздно - нужно быть быстрее. Получил результат по-другому: https://regex101.com/r/eW6eA8/1 – Falt4rm

+0

Falt4rm, ваш ответ был неплохим, и он работал лучше, чем первое решение от stribizhev !!! Никогда не сдавайся! :-) – Ivan

+0

Ну рад, что это помогло - Regex Ftw! -> «Только лестница реальна» - GoT // Или нет. – Falt4rm

ответ

1

Просто фиксируя ваши регулярные выражения, я могу предложить следующее регулярное выражение:

^(?![^ .-]*[ .-]{2})((\+|00)[1-9]{1,3})?[ .-]?((\d{0,3})[ .-]?(\d{5,11}))$ 

demo

ОБЪЯСНЕНИЕ:

  • ^ - начало строки
  • (?![^ .-]*[ .-]{2}) - Убедившись, нет никаких последующих сепараторов
  • ((\+|00)[1-9]{1,3})? - Приставка + или 00 и 1 или 3 цифры от 1-9 диапазона
  • [ .-]? - необязательный сепаратор
  • ((\d{0,3})[ .-]?(\d{5,11})) - от 0 до 3 цифр, за которым следует дополнительный разделитель, а затем от 5 до 11 цифр
  • $ - Конец строки.

В случае, если Вы не делаете использование захвата групп здесь, просто удалить их или сделать не-захвата:

^(?![^ .-]*[ .-]{2})(?:(?:\+|00)[1-9]{1,3})?[ .-]?\d{0,3}[ .-]?\d{5,11}$ 

Следуя вашей логике, мы можем еще больше оптимизировать эту модель как

^(?:\+|00)[1-9]{1,3}[. -]?[0-9]{3}[. -]?[0-9]{5,11}$ 

Это комментарий improved version suggested by @Falt4rm.

+0

Спасибо, upate работает лучше (в предыдущей версии действительный номер телефона как +393491234567 был отклонён) – Ivan

Смежные вопросы