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