我正在对函数中的字符串进行正则表达式检查:
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子句。所以我一定不能正确地调用这个功能。
我正在尝试做什么的正确方法是什么?
答案 0 :(得分:5)
您的功能可以大大简化为:
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 points out)不在你的函数中,而在于它的使用。你的函数回答了一个问题,“这是一个有效的邮政编码字符串吗?”,但是你对它的使用是说:“如果我的函数说的那样,说这是无效的。”
答案 1 :(得分: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');
}
答案 2 :(得分:2)
其他人正确地指出你刚刚以错误的顺序进行了测试。但是,更重要的是,你的正则表达式是不正确的,因为例如它将为“1234567890”返回true。
这是一个建议:
function ValidateZipCodeString(listOfZipCodes) {
return /^\d{5}(\s*,\s*\d{5})*$/.test(listOfZipCodes);
}