我注意到当我输入单词test或dabd时,它没有说“test is a palindrome”;显然这些应该失败。我测试其他的话,如赛车,女士,猫,他们都通过。我从最左边的角色和最右边的角色进行检查,直到我们到达中间。可能是什么问题?
function lengthChecker() {
var str = document.getElementById("str").value;
if (str.length > 10) {
alert("Sorry. Your input surpasses the 10 characters maximum. Please try again.")
return false;
} else if (str.length == 0) {
alert("Sorry. Your input is too short, and doesn't meet the 10 characters maximum. Please try again.")
return false;
}
palindrome(str);
}
function palindrome(str) {
var j = str.length;
if (/\s/.test(str)) {
alert("No spaces allowed.")
return false;
}
for (i = 0; i < j / 2; i++) {
if (str[i] == str[j - 1 - i]) {
isPalindrome('', str);
return true;
} else {
notPalindrome(str);
return false;
}
}
}
function isPalindrome(e, str) {
alert(str + " is a Palindrome.");
}
function notPalindrome(str) {
alert(str + " isn't a Palindrome");
}
document.addEventListener("DOMContentLoaded", function(e) {
var el = document.getElementById("checkInput");
el.addEventListener("click", lengthChecker);
});
答案 0 :(得分:1)
在palindrome()
中,您始终只检查第一个字符并立即返回。像这样修复循环:
for (var i = 0; i < j / 2; i++) {
if (str[i] != str[j - 1 - i]) {
notPalindrome(str);
return false;
}
}
isPalindrome('', str);
return true;
答案 1 :(得分:0)
供参考,您无需循环。您可以将回文测试简化为:
str === str.split('').reverse().join('')
这会将字符串拆分为一个数组,然后可以将其反转。然后它将它连接回一个字符串,以便你可以比较它。
然后我将其置于三元语句中以修改消息:
var notp = (str === '' || str !== str.split('').reverse().join('').replace(" ", "")) ? 'is NOT':'IS';
我添加了“str ===''”来测试非条目,我也添加了删除空格测试。现在你有了一个可以推送到通用警报或其他任何变量的变量。您可以将其更改为“true:false;”相反,你想要控制的不仅仅是消息的文本。
以下消除了前导和尾随空格:
str = str.trim();
您可以进行更多编辑,但这可以帮助您。这是一个jsfiddle: https://jsfiddle.net/mckinleymedia/fudLdx0r/