在JavaScript中检查一个字符串是否为回文字符串

5

这个任务的要求是,代码针对一个输入字符串返回“true”或“false”。该字符串可以是简单的单词或短语。其他问题没有解决这些需求。请重新打开并在此回答。我正在编写一个函数来检查给定的字符串是否是回文。我的代码似乎适用于简单的单词回文,但不适用于具有大小写或空格的回文。

function palindrome(str) 
{
    var palin = str.split("").reverse().join("");

    if (palin === str){
        return true;
    } else {
        return false;
    }
}   

palindrome("eye");//Succeeds
palindrome("Race car");//Fails

那个问题是在问如何生成回文,而不是根据上述条件检查两个字符串是否为回文。如果我们能够重新打开这个问题,我会将以下内容发布为答案:function isPalindrome(str) { str = str.replace(/\s/g, '').toLowerCase(); return str === str.split('').reverse().join(''); } - Alexander O'Mara
@AlexanderO'Mara,你在这方面走在了正确的道路上。我需要帮助理解如何在JavaScript中使用正则表达式,并在此处使用它们来删除空格和任何标点符号以及任何大写字母。我希望他们能重新打开这个问题,因为另一个问题肯定是不同的。 - Austin Hansen
处理标点符号时,您可以只保留工作字符。 function isPalindrome(str) { str = str.replace(/\W/g, '').toLowerCase(); return str === str.split('').reverse().join(''); } - Alexander O'Mara
公平地说,在那个其他问题中实际上有一个回答可以满足你的需求:https://dev59.com/82Eh5IYBdhLWcg3wtFT4#22343082 如果不是标题,问题描述似乎也包括了该用例。 - Alexander O'Mara
大量重复的极其流行的问题并不符合论坛的最佳利益。如果您想争辩这一点,可以在 Meta 上讨论。这不是我的政策。此外,如果您认为您的问题很独特,那么您可以编辑它,确保其独特的要求非常清楚地指出,并清楚地指出为什么您的问题是独特的。 - jfriend00
显示剩余6条评论
9个回答

9

首先将字符串转换为小写。同时,删除不是字母的字符。因此,字符串比较变成了数组,然后反转它,并再次转换为字符串。

Step 1: str1.toLowerCase().replace(...) => "Race car" => "race car" => "racecar"
Step 2: str2.split("") => ["r","a","c","e","c","a","r"] => .reverse().join() => "racecar"
Result: str1 === str2

function palindrome(str) {
   str = str.toLowerCase().replace(/[^a-z]+/g,"");
   return str === str.split("").reverse().join("")
}

alert(palindrome("eye")); //true
alert(palindrome("Race car")); //true
alert(palindrome("Madam, I'm Adam")); //true


这将具有相同的空格,大小写和标点符号问题。 - Austin Hansen
@AustinHansen 已更新,现在所有的空格都被替换了,并且所有字符都变成小写以避免问题。 - Walter Chapilliquen - wZVanG

4

像这样 if (word === word.split('').reverse().join('')) {/*是回文!*/} 我想说

一个 isPalindrome 字符串扩展:

String.prototype.isPalindrome = function () {
  var cleaned = this.toLowerCase().match(/[a-z]/gi).reverse();
  return cleaned.join('') === cleaned.reverse().join('');
}

var result = document.querySelector('#result');
result.textContent = "'eye'.isPalindrome() => " + 'eye'.isPalindrome() +
                     "\n'Something'.isPalindrome() => " + 'Something'.isPalindrome() +
                     "\n'Race Car'.isPalindrome() => " + 'Race Car'.isPalindrome() +
                     "\n'Are we not drawn onward, we few, drawn onward to new era?'.isPalindrome() => " + 
                        'Are we not drawn onward, we few, drawn onward to new era?'.isPalindrome() +
                     "\n'Never even or odd'.isPalindrome() => " + 'Never even or odd'.isPalindrome() +
                     "\n'Never odd or even'.isPalindrome() => " + 'Never odd or even'.isPalindrome();
;
<pre id="result"></pre>


2
function palindrome(str) {
    let letters = str.split('').filter(function (str) {
        return /\S/.test(str);
    });
    let reversedLetters = str.split('').reverse().filter(function (str) {
        return /\S/.test(str);
    });

    for (let i = 0; i < letters.length; i++) {
        if (letters[i].toLowerCase() !== reversedLetters[i].toLowerCase()) {
            return false;
        }
    }
    return true;
}
console.log(palindrome("eye")); //true
console.log(palindrome('Race car')); //true

1
const palindromes = arrayOfWords.filter((item) => {
    return item === item.split('').reverse().join('');
})

这是一个例子 :-)。

0
我先创建了一个查找对象,然后分析每个查找项的频率。
例如,如果字符串为"PEEPs",则查找对象为{p:2, e:2, s:1}。
请参考以下函数以获取更多详细信息。
function checkPlaindrome(str) {
  const lookUp = {};
  // Create the lookUp object
  for (let char of str.toLowerCase().trim()) {
    if (char !== " ") lookUp[char] = ++lookUp[char] || 1;
  }
  // Analyse the lookup object
  const singleCharCheck = Object.values(lookUp).filter((val) => val === 1);
  const findalSingleCharCheck =
    singleCharCheck.length === 0 || singleCharCheck.length === 1;
  const noneSingleCharCheck =
    Object.values(lookUp)
      .filter((val) => val !== 1)
      .filter((val) => val % 2 !== 0).length === 0;

  return findalSingleCharCheck && noneSingleCharCheck;
}

const r = checkPlaindrome("w wPEEPs"); // true
const r1 = checkPlaindrome("w PEEPs"); // false

0
function palindrome(str) {

  var st='';    
  st=str.replace(/[^a-z0-9]/ig,"").toLowerCase();    
  var arr=[];    
  arr=st.split('');    
  arr=arr.reverse();    
  var strr='';    
  strr=arr.join('');
  if(strr==st) {
     return true;
 }
 return false;
}    
palindrome("A man, a plan, a canal. Panama");//calling the function

0

//1. 将字符串转换为数组 //2. 使用反转方法 //3. 将数组作为字符串返回 //4. 返回输入=新的反转字符串

var lowerCasedString = inputString.toLowerCase(); var reversedString = lowerCasedString.split("").reverse().join(""); return reversedString === lowerCasedString;
}
希望这对你有所帮助:


0

尽可能简单!

function checkStrForPalindorme(string) {
  const str = string.toLowerCase().trim();
  const reversedStr = str.split("").reverse().join("");

  return str === reversedStr;
}

console.log(checkStrForPalindorme("aaffaa "))
console.log(checkStrForPalindorme("dummy"))


0

使用 ES6 实现回文检查

const checkPalindrome=(str)=> {
  return str.toLowerCase().trim() === str.toLowerCase().trim().split('').reverse().join('');
}
console.log(checkPalindrome("Level "))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接