Regex - простой номер телефона

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

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

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

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

до сих пор мое выражение похоже на это

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

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

7
задан IamBanksy 15 July 2010 в 14:31
поделиться

6 ответов

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

. Обратите внимание, что это все равно позволит 555555-5555 и 555-5555555 - Я не знаю, описаны ли они в вашей и т. Д. части

5
ответ дан 6 December 2019 в 22:59
поделиться

Это соответствует желаемым числам, (,) и -

/^[0-9()-]+$/
5
ответ дан 6 December 2019 в 22:59
поделиться

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

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

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

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

1
ответ дан 6 December 2019 в 22:59
поделиться

Второй карат (афаик) сломает все, что вы делаете, поскольку он означает «начало цепочки».

Похоже, что вы просите:

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

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

Вам нужно / ^ [0-9 () -] + $ / для очень грубого шаблона, который будет «работать».

0
ответ дан 6 December 2019 в 22:59
поделиться

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

0
ответ дан 6 December 2019 в 22:59
поделиться

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

0
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: