Javascript电话号码验证并列符号

Javascript电话号码验证并列符号,javascript,validation,Javascript,Validation,我做了一些搜索,在那里其他人问这个问题和答案,但没有一个似乎符合我试图做的。基本上,我正在对接受(123)4567890作为条目的电话条目进行验证。我已经实现了一个可以接受简单数字字符串(如123456780)和一个带破折号123-456-7890的字符串。我知道我犯了一个简单的错误,但我不知道我做错了什么 以下是正在使用的带破折号的电话号码表单: //Validates phone number with dashes. function isTwelveAndDashes(phone) {

我做了一些搜索,在那里其他人问这个问题和答案,但没有一个似乎符合我试图做的。基本上,我正在对接受(123)4567890作为条目的电话条目进行验证。我已经实现了一个可以接受简单数字字符串(如123456780)和一个带破折号123-456-7890的字符串。我知道我犯了一个简单的错误,但我不知道我做错了什么

以下是正在使用的带破折号的电话号码表单:

//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;
}​
//用破折号验证电话号码。
函数IsWelve和破折号(电话){
如果(phone.length!=12)返回false;
var pass=真;
对于(变量i=0;i
这是我无法解决的问题

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;
}​
功能是WelveandPara(电话){
如果(phone.length!=12)返回false;
var pass=真;
对于(变量i=0;i
您的代码不起作用,因为您忘记了
,否则如果

    else if (i == 4) { // Added the "else" on the left.
类似的东西(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'));
}
var编号=['(1234567890'、'(123)4567890'、'1234567890'、'1234567890'、'1234567890'、'1234567801';
变量规则=/^(\(\d{3}\)\d{7}\d{3}-\d{3}-\d{4}\d{10})$/;
对于(变量i=0;i\t'+(通过?'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;
}
函数isDigit(num){
return!isNaN(parseInt(num))
}
功能IsWelveandPara(电话){
如果(phone.length!=12)返回false;
对于(变量i=0;i

您可以根据第二个正则表达式
{6,10}中的范围更改要接受的位数
。允许使用引导
+

以下是验证电话号码的方法:不要。如果您的用户在海外怎么办?如果他们有分机怎么办?您从验证中获得的好处通常会被您无意关上的门冲掉。(没有任何验证可以确保你得到一个有效的电话号码;任何验证规则都可能被一个看起来真实、假的号码所愚弄。)澄清这不是用于商业网站,而是我教育的一部分。我想看看我做错了什么。我知道它与(和)的if语句有关字符,但我不确定将这两个字符连接到if(&&&)语句中的语法是否正确。@T.J.Crowder。您忘了提到字符串模式检查应该使用
regex
。+1我在回答类似问题时看到了这个示例。我毫不怀疑它是否有效(事实上,它比我展示的编程更好),但出于练习的目的,我需要保持类似于IstwelveAndDash(电话)的风格函数。你的最后一个else部分将计算除4之外的所有
i
值。你想使用
else if
s来代替。请查看下面我的建议,以获得一个示例。gdoron所指的是正则表达式。对他的答案的补充:查看Mozilla或。我在回答类似问题时看到了这个示例。我毫不怀疑它是有效的(事实上比我现在展示的更好),但是为了练习的目的,我需要保持类似于IstwelveAndDash(电话)的风格函数。谢谢。我知道这是一件非常简单和愚蠢的事情。@JoshuaAslanSmith。很高兴能提供帮助。我在回答类似问题时看到了这个例子。我毫不怀疑它是有效的(事实上,它比我现在展示的编程更好),但出于练习的目的,我需要保持类似于IstwelveAndDashs(电话)函数的风格。谢谢。我知道这是一个难以置信的简单和愚蠢的部分。没问题。我写了一个替代函数,它要短得多,以防万一…