регулярные выражения с экранирующими круглыми скобками

Я пытаюсь написать выражение, которое будет принимать следующий формат телефонных номеров:

508 736 756
505050505
+48 505 505 505
(+48) 505 505 505
++48 505 505 505
(++48) 505 505 505
(23)692 36 99
23 692 36 99

Я написал следующее выражение

^(([+]{0,2}?)?([+]{0,2}?)?([0-9 ]+)?)$

Однако это выражение охватывает только форматы, перечисленные ниже:

508 736 756
505050505
+48 505 505 505
++48 505 505 505
23 692 36 99

У меня проблема с экранированием символов в скобках: (), Вот почему я не могу охватить следующие форматы:

(+48) 505 505 505
(++48) 505 505 505
(23)692 36 99

Я пытался избежать их с обратной косой чертой, но по какой-то причине это не сработало.

…[(]? [+] {0,2} [)]? …

DEMO: https://regex101.com/r/hY5tG4/2

8

Решение

Вы можете использовать следующее регулярное выражение:

^((\(\+{0,2}[0-9]{1,2}\)|\+{0,2}[0-9]{0,2})?([0-9 ]+)?)$

демонстрация

Заметка что вы пропустили числа в круглых скобках. Кроме того, что касается скобок и чисел между ними, вы не можете сделать скобки необязательными, потому что они объединяются, и если вы сделаете их необязательными, механизм регулярных выражений будет соответствовать некоторым телефонным номерам, таким как (23692 36 99,

И обратите внимание, это регулярное выражение будет соответствовать числам, как (2) 692 36 99 если длина чисел в скобках должна быть 2, вы можете изменить значение в регулярном выражении.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector