4

関数内の文字列に対して正規表現チェックを行っています。

function ValidateZipCodeString(listOfZipCodes) {
    var regex = /^([, ]*\d{5})+[, ]*$/,
    matches = regex.exec(listOfZipCodes);

    if (regex.exec(listOfZipCodes) === null) {
        console.log('validation failed');
        return false;
    } else {
        console.log('validation passed');
        return true;
    }
}

正規表現は、郵便番号の有効/無効リストを正しく検出しています。

私はこれで関数を呼び出しています:

console.log('zip code: ' + listOfZipCodes);
if (ValidateZipCodeString(listOfZipCodes)) {
    $tr.find('label#lblCoverageEditError').text('There is invalid text in the list of zip codes. Only 5-digit zip codes allowed.').show();
} else {
    console.log('validate function returned true');
}

問題は、検証関数内のコンソール出力に「検証に失敗しました」と表示されたときに、上記のif/elseがelse句に移動することです。したがって、その関数を正しく呼び出してはいけません。

私がやろうとしていることをする正しい方法は何ですか?

4

3 に答える 3

7

関数は次のように大幅に単純化できます。

function ValidateZipCodeString(listOfZipCodes) {
    var regex = /^([, ]*\d{5})+[, ]*$/;

    if (regex.test(listOfZipCodes)) {
        console.log('validation passed');
        return true;
    } else {
        console.log('validation failed');
        return false;
    }
}

...また:

function ValidateZipCodeString(listOfZipCodes) {
    var regex = /^([, ]*\d{5})+[, ]*$/;
    return regex.test(listOfZipCodes);
}

...または単に:

function ValidateZipCodeString(listOfZipCodes) {
    return /^([, ]*\d{5})+[, ]*$/.test(listOfZipCodes);
}

...しかし、(Teemuが指摘するように) 本当の問題は機能ではなく、その使用にあります。あなたの関数は、「これは有効な郵便番号文字列ですか?」という質問に答えますが、それを使用すると、「関数がそうであると言ったら、これは無効であると言えます」と言っています。

于 2013-01-31T18:00:01.403 に答える
5

実際、true検証が失敗した場合、検証関数は戻りません。値を間違ってチェックするだけです。次のようにする必要があります。

if (!ValidateZipCodeString(listOfZipCodes)) {
    $tr.find('label#lblCoverageEditError').text('There is invalid text in the list of zip codes. Only 5-digit zip codes allowed.').show();
} else {
    console.log('validate function returned true');
}
于 2013-01-31T18:05:57.380 に答える
2

他の人は、あなたがテストを間違った順序で行っただけだと正しく指摘しました。ただし、さらに重要なのは、たとえば「1234567890」に対してtrueを返すため、正規表現が正しくないことです。

ここに提案があります:

function ValidateZipCodeString(listOfZipCodes) {
    return /^\d{5}(\s*,\s*\d{5})*$/.test(listOfZipCodes);
}
于 2013-01-31T18:19:30.593 に答える