【问题标题】:Replace non alphanumeric characters to check palindrome using javascript [duplicate]使用javascript替换非字母数字字符以检查回文[重复]
【发布时间】:2015-12-04 08:59:49
【问题描述】:
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,但我似乎无法找到究竟是什么错误。

【问题讨论】:

  • 尝试打印字符串和反转字符串。这将帮助您找到问题。
  • 只需使用if(strReverse===str.toLowerCase().replace(/\W+/g, '')) 条件。

标签: javascript regex palindrome


【解决方案1】:

您在创建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>

【讨论】:

    【解决方案2】:

    试试这个功能

    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 等。

    Check this fiddle for every test case

    【讨论】:

    • 非常感谢..它现在可以工作了
    • 很高兴它有帮助,请考虑投票并将其标记为正确答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多