使用JavaScript

时间:2018-01-21 15:27:47

标签: javascript palindrome

我需要编写一个带有参数str的函数的代码,该函数评估该单词是否为回文,它应该返回true,否则应返回false

注意:我需要删除所有非字母数字字符。

我编写了下面的代码,但它与预期的结果相反:

  • 所有案件都是假的。
  • 无法删除下划线。
  • 当我在图片下方使用console.log时。

console.log result

代码:

function palindrome(str) {
  var exc = /[^\w_]/gi;
  var repStr = str.toLowerCase().replace(exc, "");
  console.log("Replaced string id: " + repStr);
  len = repStr.length -1

  for (var i = 0; i <= len; i++) {
    if (str[i] !== repStr[len] - i) {
      return false;
    }
  }
  return true;
}

console.log(palindrome("eye"));
console.log(palindrome("_eye"));
console.log(palindrome("race car"));
console.log(palindrome("not a palindrome"));
console.log(palindrome("A man, a plan, a canal. Panama"));
console.log(palindrome("never odd or even"));
console.log(palindrome("nope"));
console.log(palindrome("almostomla"));
console.log(palindrome("My age is 0, 0 si ega ym"));
console.log(palindrome("1 eye for of 1 eye."));
console.log(palindrome("0_0 (: /-\ :) 0-0"));
console.log(palindrome("five|\_/|four"));

3 个答案:

答案 0 :(得分:1)

您的代码中有2个错误。 1)RegExp没有替换下划线,因为[^\w_]读取为&#34;所有不是单词字符或下划线&#34;。尝试

/[\W_]/g

读作&#34;以下之一:任何不是单词字符的字符,下划线&#34;

OR

/[^0-9a-z]/g

读作&#34;任何不是:数字(从0到9),英文字母&#34;。

2)要使它工作,你需要写

if(repStr[i] !== repStr[len - i])

而不是

if(str[i] !== repStr[len] - i)

答案 1 :(得分:0)

你可以简单地替换你的两行

for (var i = 0; i <= len; i++, len--) {
    if (str[i] !== repStr[len]) {

检查这个

&#13;
&#13;
function palindrome(str) {
  var exc = /[^\w_]/gi;
  var repStr = str.toLowerCase().replace(exc, "");
  console.log("Replaced string id: " + repStr);
  len = repStr.length -1

  for (var i = 0; i <= len; i++, len--) {
    if (str[i] !== repStr[len]) {
      return false;
    }
  }
  return true;
}

console.log(palindrome("eye"));
console.log(palindrome("_eye"));
console.log(palindrome("race car"));
console.log(palindrome("not a palindrome"));
console.log(palindrome("A man, a plan, a canal. Panama"));
console.log(palindrome("never odd or even"));
console.log(palindrome("nope"));
console.log(palindrome("almostomla"));
console.log(palindrome("My age is 0, 0 si ega ym"));
console.log(palindrome("1 eye for of 1 eye."));
console.log(palindrome("0_0 (: /-\ :) 0-0"));
console.log(palindrome("five|\_/|four"));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

试试这个:

function palindrome(str) {
    const letters = str.replace(/[^a-z]/gi, ''); // replace any char that is not in the set [a-z] range
    const lowercase = letters.toLowerCase();
    const reversed = lowercase.split('').reverse().join('');
    return lowercase === reversed;
}