2009-10-13 2 views
1

Регулярное выражение ^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$ соответствует строкам формы XXX-XXX-XXXX и XXX-XXXX (я что-то пропускаю?).Регулярное выражение для соответствия номерам телефонов США

Это, однако, не соответствует (XXX) XXX-XXXX и (XXX) XXX-XXX-XXXX (что мне нужно, чтобы оно соответствовало).

Можете ли вы помочь мне исправить его так, чтобы он совпадал с форматом
XXX-XXX-XXXX, XXX-XXXX, (XXX) XXX-XXXX, (XXX) XXX-XXXX
, не вызывая его, чтобы соответствовать другим строковые форматы, которые я не хочу?

ответ

6

Ваша спецификация немного сбивает с толку ваших. последние два случая выглядят одинаково:
XXX-XXX-XXXX
XXX-XXXX
(XXX) XXX-XXXX
(XXX) XXX-XXXX

(Похоже, вы пытаетесь найти номер телефона, верно?) Предполагая, что ваш последний случай - «(XXX) XXX-XXXX» (пробел между региональным кодом и обычным номером отсутствует, это означает дополнительное пространство), то ваш RegExp почти правильно, просто добавьте два слеша перед кодом города, круглые скобки, так что они соответствуют, как простые символы, а не специальных символов группировки «?»:

^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$

Обратите внимание, что ваше регулярное выражение, возможно, не прошло должным образом, я заметил, что переполнение стека удалило одну обратную косую черту с рисунка RE, мне пришлось ввести двойной бит ackslash «\\», чтобы получить один обратный слеш, чтобы выйти в сообщении

0

Вам нужно бежать круглые скобки, например: \ (в противном случае, они не получают соответствие и делать захватывает вместо

2

Попробуйте это:.

(\(\d{3}\))?(\d{3}-){1,2}(\d{4}) 
-1

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

/^ ((((([0-9] { 3}) -) | ((([0-9] {3})) \ с)) ([0-9] {3}) - ([0-9] {4})) | (([0 -9] {3}) - ([0-9] {4}))) $/

Это будет работать для моделей ниже XXX-XXX-XXXX, XXX-XXXX, (XXX) XXX-XXXX

0

^(((\ d {3})) |? (\ d {3} -))? \ d {3} - \ d {4} $^

это будет работать.

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