Javascript电话号码验证括号标志

时间:2012-05-13 23:21:38

标签: javascript validation

我做了一些搜索,在那里其他人问这个问题并回答它,但没有一个看起来像我想做的那样。基本上我正在验证接受(123)4567890作为条目的电话条目。我已经实现了一个接受一个简单的数字字符串,如1234567890和一个破折号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;
}​

这是我无法解决的问题。

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;
}​

3 个答案:

答案 0 :(得分:2)

您可以使用regex

轻松完成
return !!phone.match(/\(\d{3}\)\d{7}/g)

Live DEMO


<强>更新

由于您忘记了else if

,您所使用的代码无效
    else if (i == 4) { // Added the "else" on the left.

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

答案 2 :(得分:0)

使用RegEx检查电话号码肯定是要走的路。这是验证 忽略空格,圆括号和破折号的函数:

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

您可以使用第二个正则表达式{6,10}中的范围来改变要接受的位数。允许领先+