Regex - простой номер телефона - PullRequest
7 голосов
/ 15 июля 2010

Я знаю, что есть множество примеров регулярных выражений о том, как сопоставить номера телефонов определенных типов. Для моего примера я просто хочу разрешить цифры и несколько специальных символов. У меня снова возникли проблемы с достижением этого.

Номера телефонов, которые должны быть разрешены, могут принимать эти формы

5555555555
555-555-5555
(555)5555555
(555)-555-5555
(555)555-5555 and so on

Я просто хочу что-то, что позволит [0-9], а также специальные символы '(', ')' и '-'

пока мое выражение выглядит так

/^[0-9]*^[()-]*$/

Я знаю, что это неправильно, но логически я считаю, что это означает, что разрешить числа 0-9 или и разрешить символы (,) и -.

Ответы [ 6 ]

5 голосов
/ 15 июля 2010
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$
  • \(\d{3}\)|\d{3} три цифры с или без () - более простое регулярное выражение будет \(?\d{3}\)?, но это позволит (555-5555555 и 555)5555555 и т. Д.
  • Необязательно-, за которыми следуют три цифры
  • Необязательный -, за которым следуют четыре цифры

Обратите внимание, что это по-прежнему допускает 555555-5555 и 555-5555555 - я не знаюесли они указаны в вашей и т. д. part

5 голосов
/ 15 июля 2010

Это совпадает с тем, что вы хотите цифры, (,) и -

/^[0-9()-]+$/
1 голос
/ 15 июля 2010

Почему у вас там заблудились ^?Я думаю, что вы имели в виду [()-] Это фактически заставляет вас иметь два начала строк в регулярном выражении, которые никогда не будут совпадать.

Кроме того, \d - хороший ярлык для [0-9].Они точно такие же.

Кроме того, это будет соответствовать только группе чисел, затем группе ( или ) или -.Что-то вроде: 1294819024()()()()()-----()- будет соответствовать.Я думаю, вы хотите, чтобы все это можно было повторить, что-то вроде: ^(\d*[()-]*)*$.Теперь вы можете сопоставлять повторяющиеся последовательности этого.

Теперь важно заметить, что вложенные * обычно неэффективны, мы можем понять, что мы просто хотим сопоставить любую цифру и пунктуацию, которую вы хотите:[\d()-]*

0 голосов
/ 15 июля 2010

Если вы используете только номер в США, лучшим решением будет удалить все нецифровые символы, а затем просто проверить, равна ли длина == 10.

0 голосов
/ 15 июля 2010

Второй карат (afaik) сломает все, что вы делаете, так как это означает «начало строки».

Поэтому вы, похоже, просите:

  • начало строки, затем ...
  • любое количество числовых символов, затем ...
  • начало строки, затем ...
  • любое количествоСимволы '(', ')' или '-', за которыми следует ...
  • конец строки

Что не будет работать, даже если второй карат ничего не делает,потому что вы не учитываете что-либо после первого '(', ')' или '-', и фактически, вероятно, будет проверять только пустую строку, если это так.

Выхочу /^[0-9()-]+$/ за очень грубый шаблон, который будет "работать".

0 голосов
/ 15 июля 2010

Для цифр вы можете использовать \d.Для более чем одной цифры вы можете использовать \d{n}, где n - количество цифр, которое вы хотите сопоставить.Некоторые специальные символы должны быть экранированы, например, \( соответствует (.Например: \(\d{3}\)\-\d{3}\-\d{4} соответствует (555) -555-5555.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...