返回值 - 从 javascript 函数返回 true 或 false

return value - Returning true or false from javascript function

本文关键字:true false 返回 函数 javascript 返回值      更新时间:2023-09-26

我正在对函数中的字符串进行正则表达式检查:

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 子句。所以我一定不能正确地调用该函数。

做我想做的事情的正确方法是什么?

您的函数可以大大简化为:

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指出的那样)不在于你的功能,而在于它的使用。你的函数回答了这个问题,"这是一个有效的邮政编码字符串吗?",但你对它的使用是说,"如果我的函数说它是无效的,就说这是无效的。

实际上,当验证失败时,您的验证函数不会返回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');
}

其他人正确地指出,你只是以错误的顺序进行了测试。但是,更重要的是,您的正则表达式不正确,因为它将例如为"1234567890"返回 true。

这里有一个建议:

function ValidateZipCodeString(listOfZipCodes) {
    return /^'d{5}('s*,'s*'d{5})*$/.test(listOfZipCodes);
}