2016-02-05 37 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; 
    } 
} 
相關問題