正则表达式将电话号码与国家/地区代码匹配

时间:2009-10-14 14:16:05

标签: javascript regex

这是我用来匹配电话号码的正则表达式,如:

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')
        }

5 个答案:

答案 0 :(得分:3)

  1. 您的替代格式如下所示:

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

    更改它以使用|(OR)运算符:

    (...)|(...)|(...)
    
  2. 不要逃避括号。 \(\)应该只是()

  3. 在您的第三组中,应使用反斜杠转义开头的+

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

答案 1 :(得分: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

答案 2 :(得分:0)

在javascript中,您已经转义了所有括号。您希望它们表现为捕获组,还是希望匹配字符串中的实际括号?

也使用测试代替搜索。 test返回true或false,而不是数字。

答案 3 :(得分: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})/

答案 4 :(得分: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");