2011-02-01 2 views
-2

Пытаюсь:Регулярное выражение для телефонных номеров

\d{3}|\d{11}|\d{11}-\d{1} 

соответствовать трехзначные номера, одиннадцать цифр номера, одиннадцать цифр, за которым следует дефис, а затем на одну цифру. Но это соответствует только трехзначным номерам!

Я также пробовал \d{3}|\d{11}|\d{11}-\d{1}, но не работает.

Любые идеи?

+4

Есть много тем об использовании регулярных выражений, чтобы соответствовать телефонным номерам: http://stackoverflow.com/search?q = regex + phone + number –

+0

Я также пробовал \ d {3} | \ d {11} (- \ d {1}) *, но не работает. –

+0

Номера телефонов для какой страны (или стран)? –

ответ

0

Если первая часть чередования соответствует, то двигатель регулярного выражения даже не пытается выполнить вторую часть.

Предполагая, что вы хотите сопоставить только трехзначный, 11-значный или 11-разрядный дефис 1-значный номер, тогда вы можете использовать поисковые запросы, чтобы предыдущие и следующие символы не были цифрами.

(?<!\d)(\d{3}|\d{11}|\d{11}-\d{1})(?!\d) 
+0

hi Anon. Согласно вашей фразе, я использовал \ d {11} - \ d {1} | \ d {11} | \ d {3}, и это сработало. танки. –

+1

Вы имели в виду (? sln

+0

@sln: Да, спасибо. –

1

Есть много способов акцентируя телефонные номера. Почему бы вам не удалить все, кроме цифр, и проверить длину?

Следует отметить, что существует несколько способов индикации "расширение":

+1 212 555 1212 ext.35 
+0

потому что я просто хочу использовать регулярное выражение –

+3

Ну, есть твоя проблема. – egrunin

+0

Проверьте длину, для чего, точно? – tchrist

0

\ д {7} + \ d {4} будет выбрать номер одиннадцать цифр. Я не мог заставить \ d {11} работать.

+0

Помимо соответствия одиннадцатизначному номеру, '\ d {7} + \ d {4}' также будет соответствовать номерам цифр 18, 25, 32, 39 и т. Д. –

0

Это должно работать: /(?:^|(?<=\D))(\d{3}|\d{11}|\d{11}-\d{1})(?:$|(?=\D))/
или комбинированный /(?:^|(?<!\d))(\d{3}|\d{11}(?:-\d{1})?)(?:$|(?![\d-]))/

расширен:

/ (?:^ | (?<!\d))  # either start of string or not a digit before us 
    (     # capture grp 1 
     \d{3}     # a 3 digit number 
    |      # or 
     \d{11}    # a 11 digit number 
     (?:-\d{1})?   # optional '-' pluss 1 digit number 
)      # end capture grp 1 
    (?:$ | (?![\d-]))  # either end of string or not a digit nor '-' after us 
/
Смежные вопросы