2014-12-02 52 views
0
空格,標點

我試圖讓使用javascript迴文程序,將顯示一個字符串是否是迴文或不TRUEFALSE即使字符串具有標點符號和空格(如 - 女士,我是亞當)。但每次我把一個字符串,我只得到無論字符串是什麼。這裏是我的代碼,迴文計劃,避免在Javascript

function isPalindrome (str) { 
    var nopunctuation = str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,""); 
    var nospaces = nopunctuation.replace(/\s/g,""); 
    var finalstring = nospaces; 

    var len = finalstring.length; 
    for (var i = 0; i < Math.floor(finalstring/2); i++) { 
     if (finalstring[i] !== finalstring[len - 1 - i]) { 
      return false; 
     } 
    } 
    return true;  
} 

console.log(isPalindrome("madam i'm adam")); 

我的代碼有什麼問題嗎?需要注意的是,我不允許使用任何內置或庫函數。你的幫助將非常可觀。 TNX。

+0

扭轉它,使用'finalstring.split( '')( ')'然後比較反向()加入。'。例如'String.prototype.isPalindrome = function(){var a = this.replace(/ [^ a-zA-Z] | \ s/g,'')。toLowerCase(); return a == a.split(' ').reverse()。join('');}' – 2014-12-02 13:11:45

+0

哦,很抱歉之前提過但我不能使用任何內置或庫函數來解決這個問題。如果你知道我在說什麼,我必須以一種純粹的方式去做。 – 2014-12-02 13:13:20

+0

@akz,不行不行。 – 2014-12-02 13:13:41

回答

2

內 「爲」 條款,將 「Math.floor(finalstring/2)」,由 「Math.floor(LEN/2)」

此外,您可能想提高你的標點去除,使其也例如刪除撇號。

所以,你的代碼將成爲繼:

function isPalindrome (str) { 
    var nopunctuation = str.replace(/\W/g,""); 
    var nospaces = nopunctuation.replace(/\s/g,""); 
    var finalstring = nospaces; 

    var len = finalstring.length; 
    for (var i = 0; i < Math.floor(len/2); i++) { 
    if (finalstring[i] !== finalstring[len - 1 - i]) { 
     return false; 
    } 
    } 
    return true;  
} 
+0

是的,它的工作。但我對RegEx感到困惑。說實話,我只是複製了regex部分,因爲我對如何添加,編輯感到困惑。所以我不知道如何添加撇號。如果你能告訴我如何添加它,我會非常感謝。 TNX。 – 2014-12-02 13:21:13

+1

剛編輯我的答案提供完整的解決方案。爲了添加撇號,您可以通過以下代碼替換正則表達式: /['..,-\/#!$%\^ &\*;:{} = \ -_'〜()]/ (注意在字符類的開始處新添加的撇號,即在開始方括號後面) 但是,它使用預定義的非字字符類很簡單:\ W(匹配任何字符而不是\ w類,它本身包含az,AZ,0-9和下劃線) – TanguyP 2014-12-02 13:26:50

+0

TnQ爲您的真棒解釋。 – 2014-12-02 13:28:30