0

我做了一些搜索,其他人在哪里问这个问题和答案,但没有一个似乎适合我想要做的事情。基本上,我正在验证接受 (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;
}​
4

3 回答 3

2

你可以很容易地做到这一点regex

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

现场演示


更新:

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

    else if (i == 4) { // Added the "else" on the left.
于 2012-05-13T23:24:21.750 回答
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;
}
于 2012-05-13T23:33:16.973 回答
0

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

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

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

于 2012-05-13T23:42:45.847 回答