2012-05-13 189 views
0

我做了一些搜索,并在那里其他人问这个问题和答案,但没有一个似乎符合我想要做的。基本上我正在验证接受(123)4567890作为条目的电话条目。我已经实现了一个接受一个简单的数字字符串,如1234567890和一个破折号123-456-7890。我知道我正在犯一个简单的错误,但我无法弄清楚我做错了什么。Javascript电话号码验证Paratheses标志

下面是用虚线形式的电话号码是工作:

//Validates phone number with dashes. 
function isTwelveAndDashes(phone) { 

    if (phone.length != 12) return false; 

    var pass = true; 

    for (var i = 0; i < phone.length; i++) { 
     var c = phone.charAt(i); 

     if (i == 3 || i == 7) { 
      if (c != '-') { 
       pass = false; 
      } 
     } 
     else { 
      if (!isDigit(c)) { 
       pass = false; 
      } 
     } 
    } 

    return pass; 
}​ 

,这是一个我无法管理打工了。

function isTwelveAndPara(phone) { 
    if (phone.length != 12) return false; 

    var pass = true; 

    for (var i = 0; i < phone.length; i++) { 
     var c = phone.charAt(i); 

     if (i == 0) { 
      if (c != '(') { 
       pass = false; 
      } 
     } 

     if (i == 4) { 
      if (c != ')') { 
       pass = false; 
      } 
     } 
     else { 
      if (!isDigit(c)) { 
       pass = false; 
      } 
     } 
    } 

    return pass; 
}​ 
+2

以下是验证电话号码的方法:**请勿**如果您的用户在海外,该怎么办?如果他们有扩展名会怎么样?您通过验证获得的好处通常会通过关闭您不想关闭的门来消除。 (并且没有验证将确保您获得一个*有效的*电话号码;任何验证规则都可能被一个真实的虚假号码愚弄。) –

+0

澄清这不是用于商业网站,而是我的教育的一部分。我期待看到我做错了什么。我知道它与(和)字符的if语句,但我不确定将它们两者都加入if(&&)语句的正确语法。 –

+0

@ T.J.Crowder。你忘了提到应该用'regex'完成字符串模式检查... +1 – gdoron

回答

2

您可以regex很容易做到这一点:

return !!phone.match(/\(\d{3}\)\d{7}/g) 

Live DEMO


更新:

的代码你有没有工作,因为你忘else if

else if (i == 4) { // Added the "else" on the left. 
+0

gdoron指的是正则表达式。他的回答补充:查看Mozilla的[RegExp文档](https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions)或[自己尝试](http://www.regular-expressions.info /javascriptexample.html)。 – briangonzalez

+0

我在回答类似问题时看到过这个例子。我不怀疑它的工作原理(事实上它比我所展示的编程更好),但为了练习的目的,我需要保持isTwelveAndDashes(phone)函数的类似风格。 –

+0

@JoshuaAslanSmith。好。请参阅更新。 – gdoron

0

类似的东西(RegExp规则)可以确保它匹配任一规则。

var numbers = ['(1234567890','(123)4567890','123-456-7890','1234567890','12345678901']; 
var rule = /^(\(\d{3}\)\d{7}|\d{3}-\d{3}-\d{4}|\d{10})$/; 
for (var i = 0; i < numbers.length; i++) { 
    var passed = rule.test(numbers[i].replace(/\s/g,'')); 
    console.log(numbers[i] + '\t-->\t' + (passed ? 'passed' : 'failed')); 
} 

编辑:用正则表达式

function isDigit(num) { 
    return !isNaN(parseInt(num)) 
} 
function isTwelveAndPara(phone) { 
    if (phone.length != 12) return false; 
    for (var i = 0; i < phone.length; i++) { 
     var c = phone.charAt(i); 
     if (i == 0) { 
      if (c != '(') return false; 
     } else if (i == 4) { 
      if (c != ')') return false; 
     } else if (!isDigit(c)) return false; 
    } 
    return true; 
} 

// or... 

function isTwelveAndPara(phone) { 
    if (phone.length != 12 || phone.charAt(0) != '(' || phone.charAt(4) != ')') return false; 
    for (var i = 1; i < phone.length, i != 4; i++) { 
     if (!isDigit(phone.charAt(i))) return false; 
    } 
    return true; 
} 
+0

我见过这个例子来回答类似的问题。我不怀疑它的工作原理(事实上它比我所展示的编程更好),但为了练习的目的,我需要保持isTwelveAndDashes(phone)函数的类似风格。 –

+0

谢谢。我知道这是一件令人难以置信的简单而愚蠢的事情。 –

+0

没问题。我写了一个替代你的功能,这是短得多,以防万一...... – inhan

0

检查电话号码是肯定要走的路。下面是验证 功能,忽略空格,括号和破折号:

check_phone(num) { 
    return num.replace(/[\s\-\(\)]/g,'').match(/^\+?\d{6,10}$/) != null} 

你可以改变的位数与第二正则表达式{6,10}的范围内接受。允许带领+