2016-02-05 33 views
1

试图检查回文。我查过其他答案,但没有包含标点符号&空格。JavaScript检查回文(包括空格和标点符号)

“从不奇怪甚至不”和“一个男人,一个计划,一条运河。巴拿马”应该回归真实,但他们不会。

function palindrome(str) { 
    if(str.replace(/[^\w\s]|_/g, "").toLowerCase() === str.replace(/[^\w\s]|_/g, "").toLowerCase().split("").reverse().join("")){ 
    return true; 
    } else { 
    return false; 
    } 
} 
palindrome("eye"); 
+0

如果空格和标点符号是回文的一部分,它们不应该返回true。 – tenub

回答

3

我认为您在RegEx中有错误。如果你想删除空格,你不需要那个\s。尝试改变:

str.replace(/[^\w\s]|_/g, "") 

随着

str.replace(/[^\w]|_/g, "") 
+0

工作。谢谢。新来的js为什么它没有工作? (将在5分钟内接受答案) – Apswak

+0

那么,用这个正则表达式,你说:替换下划线和所有不是'\ w'(一个单词字符)或'\ s'(一个空格)的空字符串。这意味着空间不会被删除。其实,我不得不说leo.fcx提出的那个肯定是更清洁的。 – Aioros

+0

@Aioros:你的正则表达式使用'0_0(:/ - \ :) 0-0',因为'_'和'-'被删除,但是由于'\ W'不匹配,所以leo的正则表达式不会去除'_'他们。所以,对于OP,你的答案正在起作用。你可以在你的答案中使用'/ \ W | _/g'正则表达式。 –

2

使用,而不是:

str.replace(/\W/g, "") 

这将被空字符串替换任何非单词字符。

+0

值得一提的是:'\ W = [^ \ w] = [^ a-zA-Z0-9_]' – Tushar

+0

对于“0_0(:/- \ :) 0-0“。谢谢你尝试。 – Apswak

+0

为了使它更清楚:字符串中的''''必须加倍以表示一个字面''''',但它似乎不起作用。 –

0

你可以尝试一个简单的正则表达式,它只是替换不在字母表中的任何字符?

function palindrome(str) { 
    if(str.replace(/[^a-zA-Z]/g, "").toLowerCase() === str.replace(/[^a-zA-Z]/g, "").toLowerCase().split("").reverse().join("")){ 
    return true; 
    } else { 
    return false; 
    } 
} 
相关问题