2009-10-14 2 views
1

Это регулярное выражение я использую, чтобы соответствовать номера телефонов, как:Регулярное выражение для соответствия телефонных номеров с кодами стран

00 00 00 00 00 
00 00 0 00 00 00 00 
+00 0 00 00 00 00 

(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}) 

Я попытался включить его в мои JavaScript, но это на самом деле не работает

if(document.maj_profil.phone.value.search(/^\(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)\s+\(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)\s+\(+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)/) == -1) 
    { 
    displayDialog('wrong phone format') 
     } 
+1

Наверняка эти \\\ (\\\) 's неверны? В ваших примерах нет скобок по номерам телефонов. – 2009-10-14 14:20:04

+0

Ваш пользователь должен ввести 1 номер телефона или он должен ввести все 3? – jantimon

+0

только один, но есть 3 возможных формата – Roch

ответ

3
  1. Где вы ваши альтернативные форматы перечислены как:

    (...)\s+(...)\s+(...) 
    

    изменения, которые, чтобы использовать | (OR) оператор:

    (...)|(...)|(...) 
    
  2. Не избежать круглые скобки , \( и \) должно быть просто ( и ).

  3. В вашей третьей группе + в начале должны быть экранированы с помощью обратной косой черты:

    (\+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}) 
    
+0

спасибо, что он отлично работает – Roch

1

Попробуйте вместо этого:

\d\d(\s+\d\d){4}|(\d\d\s+\d\d\s+\d|\+\s+\d)\d\d(\s+\d\d){3} 

, что означает:

\d\d(\s+\d\d){4} // 00 00 00 00 00 

|     // OR 

(     // (
    \d\d\s+\d\d\s+\d // 00 00 0 
    |     // OR 
    \+\s+\d   // + 0 
)     //) 
\d\d(\s+\d\d){3} // 00 00 00 00 
0

В JavaScript, вы убежали все скобки. Вы хотите, чтобы они вели себя как захватывающие группы, или вы хотите совместить фактические скобки в строке?

Также используйте тест вместо поиска. test возвращает true или false, а не число.

0

Экранирование скобок превращает их в литералы. Попробуйте без побегов:

/^(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})/ 
0

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

var re = /^\+?(\d{1,2} ?)+$/g 
var phone = "00 00 00 00 00"; //"00 00 00 00 00x"; 
if(!re.test(phone)) 
    alert("wrong phone pattern"); 
Смежные вопросы