替换非字母数字字符以使用 javascript 检查回文

Replace non alphanumeric characters to check palindrome using javascript

本文关键字:javascript 检查 回文 数字字符 替换      更新时间:2023-09-26
function palindrome(str) {
  var strReverse=str.toLowerCase().replace(/'W+/g,'').split('').reverse().join('');
  if(strReverse===str)
    return true;
  else
    return false;
}

该程序应检查以下回文:

palindrome("eye") should return true.
palindrome("race car") should return true.
palindrome("not a palindrome") should return false.
palindrome("A man, a plan, a canal. Panama") should return true.
palindrome("never odd or even") should return true.
palindrome("nope") should return false.
palindrome("almostomla") should return false.
palindrome("My age is 0, 0 si ega ym.") should return true.
palindrome("1 eye for of 1 eye.") should return false.
palindrome("0_0 (: /-' :) 0-0") should return true.

但它不适用于多弦线。我认为这是因为RegEx但我似乎找不到到底出了什么问题。

您在创建strReverse时使用toLowerCase,然后将其与str进行比较。但是str仍然会有大写字符。此外,您将非字母字符保留在 str 中。

您还需要删除_才能使最后一个正常工作,'W不会自行执行此操作。

您需要首先准备str,然后创建它的反向版本,并执行检查:

function palindrome(str) {
    var strReverse;
    str = str.toLowerCase().replace(/'W|_+/g,'');
    strReverse = str.split('').reverse().join('');
    return strReverse === str;
}

现场示例:

function palindrome(str) {
    var strReverse;
    str = str.toLowerCase().replace(/'W|_+/g,'');
    strReverse = str.split('').reverse().join('');
    return strReverse === str;
}
function test(str, expectedResult) {
    var result = palindrome(str);
    var p = document.createElement('p');
    p.className = !result == !expectedResult ? "good" : "bad";
    p.appendChild(document.createTextNode(str));
    document.body.appendChild(p);
}
test("eye", true);
test("race car", true);
test("not a palindrome", false);
test("A man, a plan, a canal. Panama", true);
test("never odd or even", true);
test("nope", false);
test("almostomla", false);
test("My age is 0, 0 si ega ym.", true);
test("1 eye for of 1 eye.", false);
test("0_0 (: /-' :) 0-0", true);
.good {
  color: green;
}
.bad {
  color: #d00;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

试试这个函数

function palindrome(str) {
    str=str.toLowerCase().replace(/[^A-Za-z]+/g, '');
    var strReverse = str.split('').reverse().join('');
    if(strReverse===str)
        return true;
    else
        return false;
}

代码中的问题是,当您将strReversestr进行比较时,strReverse被格式化了,但str没有。就像您没有从str中删除特殊字符,空格和数字一样,您没有将其lowercase等。

检查每个测试用例的此小提琴