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

そのようなもの(正規表現ルール)は、どちらのルールにも一致することを確認できます。

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

正規表現で電話番号を確認することは確かに道です。スペース、括弧、およびダッシュを無視する検証関数は次のとおりです。

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

2 番目の正規表現の範囲で、受け入れる桁数を変えることができます{6,10}。先頭+は許可されます。

于 2012-05-13T23:42:45.847 に答える