Я делаю проверку регулярных выражений на строку внутри функции:

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
marky 31 Янв 2013 в 21:56

3 ответа

Лучший ответ

Ваша функция может быть значительно упрощена до:

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 ) не в вашей функции, а в ее использовании. Ваша функция отвечает на вопрос «Является ли это допустимой строкой почтового индекса?», Но вы используете ее, говоря: «Скажите, что это недопустимо, если моя функция говорит, что это так».

7
Community 23 Май 2017 в 12:10

На самом деле ваша функция проверки не возвращает 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');
}
5
Teemu 31 Янв 2013 в 18:05

Другие правильно отметили, что у вас были только ваши тесты в неправильном порядке. Однако, что еще более важно, ваше регулярное выражение неверно, так как оно, например, вернет true для "1234567890".

Вот предложение:

function ValidateZipCodeString(listOfZipCodes) {
    return /^\d{5}(\s*,\s*\d{5})*$/.test(listOfZipCodes);
}
2
Christophe 31 Янв 2013 в 18:19