JavaScript回文测试失败

时间:2015-11-11 04:37:49

标签: javascript string

我注意到当我输入单词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);
});

2 个答案:

答案 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/