Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试JavaScript回文失败_Javascript_String - Fatal编程技术网

测试JavaScript回文失败

测试JavaScript回文失败,javascript,string,Javascript,String,我注意到当我逐字输入单词test或dabd时,它说“test是一个回文”而失败;显然,这些应该失败。我测试其他单词,如赛车、女士、猫,它们都通过了。我从最左边的字符和最右边的字符开始检查,然后往下走,直到我们到达中间。可能是什么问题 function lengthChecker() { var str = document.getElementById("str").value; if (str.length > 10) { alert("Sorry. Yo

我注意到当我逐字输入单词test或dabd时,它说“test是一个回文”而失败;显然,这些应该失败。我测试其他单词,如赛车、女士、猫,它们都通过了。我从最左边的字符和最右边的字符开始检查,然后往下走,直到我们到达中间。可能是什么问题

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);
});
函数长度检查器(){
var str=document.getElementById(“str”).value;
如果(str.length>10){
警报(“对不起,您的输入超过了最大10个字符。请重试。”)
返回false;
}else if(str.length==0){
警报(“对不起,您的输入太短,并且不符合最大10个字符的要求。请重试。”)
返回false;
}
回文序列(str);
}
功能回文组(str){
var j=str.length;
如果(/\s/.test(str)){
警告(“不允许使用空格”)
返回false;
}
对于(i=0;i
回文()
中,您总是只检查第一个字符,然后立即返回。按如下方式修复循环:

    for (var i = 0; i < j / 2; i++) {
        if (str[i] != str[j - 1 - i]) {
            notPalindrome(str);
            return false;
        }
    }
    isPalindrome('', str);
    return true;
for(变量i=0;i
作为参考,您不需要循环。您可以将回文测试简化为:

str === str.split('').reverse().join('')
这会将字符串拆分为一个数组,然后可以反转该数组。然后它将其连接回一个字符串,以便您可以对其进行比较

然后我将其放入一个三元语句中,用于修改消息:

var notp = (str === '' || str !== str.split('').reverse().join('').replace(" ", "")) ? 'is NOT':'IS';
我添加了“str==''来测试非条目,还添加了一个删除空格测试。现在你有了一个变量,你可以把它推到一个通用的警报或任何东西中。您可以将其改为“true:false”;相反,您希望控制的不仅仅是消息的文本

下面将去掉前导空格和尾随空格:

str = str.trim();
您可以进行更多的编辑,但这将有助于您的工作。下面是一个JSFIDLE:

palindrome()
中,您总是只检查第一个字符并立即返回。此外,lengthChecker应返回从palindrome返回的值。lengthChecker调用palindrome,返回true或false。这个值不会传回任何叫做lengthChecker的东西,那么回文返回任何东西的意义是什么呢?那么在lengthChecker中,当我调用回文(str)时,我应该返回true?