Проверка номера телефона REGEX

Я использую следующий REGEX для проверки телефонных номеров

/^(?!([^-]*-){5})(\+\d+)?\s*(\(\d+\))?[- \d]+$/gi

Если ввод допустим +51 (0) 989009890, он действителен. Но когда ввод 0051 (0) 989009890. Я новичок в REGEX, поэтому не смог найти возможное решение.

Номера телефонов действительны, если они имеют следующие форматы.

  1. 0xxxxxxxxxxx
  2. +хх хххххххххх
  3. +ххххххххххх
  4. +хх (х) хххххххххх
  5. 00ххххххххх
  6. 00xx (х) ххххххххх

здесь x обозначает числа 0-9. числа внутри () имеют ограничение до 3.


person Developer    schedule 25.01.2013    source источник
comment
Но при вводе в 0051***** ???   -  person Rohit Jain    schedule 25.01.2013
comment
на самом деле я имел в виду, что номера телефонов могут начинаться с 00xxxx, но в этом случае, если (xxx) присутствует, то размещение 00xxx впереди делает его недействительным с данным регулярным выражением   -  person Developer    schedule 25.01.2013
comment
почему (?!([^-]*-){5}).. чего вы пытаетесь добиться здесь.. я имею в виду, что это также может соответствовать ------ или даже пустому пространству   -  person Anirudha    schedule 25.01.2013


Ответы (2)


Если вы также хотите принять 0051 (0) 989009890, проблема в (+\d+)? предназначен для обработки бита перед скобками во входных данных, но для этого требуется наличие «+». Вы можете изменить это, сделав его необязательным с помощью '?', например:

/^(?!([^-]*-){5})(\+?\d+)?\s*(\(\d+\))?[- \d]+$/gi

Или, если «00xxx» должно быть альтернативой «+xxx» (то есть там должен присутствовать либо «+», либо «00»), вы можете использовать:

/^(?!([^-]*-){5})(\+\d+|00\d+)?\s*(\(\d+\))?[- \d]+$/gi
person femtoRgon    schedule 25.01.2013
comment
Почему /i, рассматривающий число, не заботится о регистре? - person h2ooooooo; 25.01.2013
comment
@h2oooooooo не забывайте про пробелы в верхнем регистре :) - person cmbuckley; 25.01.2013
comment
@Разработчик, почему вы используете (?!([^-]*-){5,}) .. также регулярное выражение также будет соответствовать ---- или пробелам - person Anirudha; 25.01.2013

Я думаю, это то, что вы ищете

^(?!([^-]*-){5,})(\+?\d+)?\s*(\(\d{1,3}\))?\s*[- \d]+$
person Anirudha    schedule 25.01.2013