2016-04-08 12 views
1

単語が回文かどうかをチェックする関数を作成しようとしています。単語が回文であれば真を返し、そうでなければ偽を返します。文字列が回文かどうかを確認する方法[閉じる]

「racecar」などのさまざまな形式の文字列を渡すことになります。この文字列には、文字列が含まれています。この文字列には、英数字以外の文字(句読点、スペース、記号) 「レースカー」、「レースカー」などがあります。

私のコードは次のとおりです。

function palindrome(str) { 
    str = str.toLowerCase().replace(/[^a-z]+/g,""); 
    if (str === str.split("").reverse().join("")){ 
    return str; 
    } else { 
    return "This is not a palindrome"; 
    } 
} 

誰かがこのコードで間違っているものを私にしてください教えてもらえますか?

+0

これを確認してください:http://stackoverflow.com/questions/233243/how-to-check-that-a-string-is-a-palindrome-using-regular-expressions – John

+2

どのようにワーキング? 'str'の代わりに' true'と 'false'を返す必要があり、' 'これは回文ではありません。 '' –

+2

何も間違っていませんか? – IrkenInvader

答えて

2

function palindrome(str) { 
    str = str.toLowerCase().replace(/[^a-z0-9]+/g,""); 
    return str === str.split("").reverse().join(""); 
} 

英数字以外の文字を削除し、小文字に変換し、trueを返します。 false

+0

ありがとうございます! ブール論理なしでこれがなぜ機能するのか説明できますか?問題文は私が単語が回文かどうかに応じて「真」または「偽」の値を返さなければならないので、私はちょっと困惑しています。 –

+0

比較、すなわち '==='(または '==')は真または偽を返します。したがって、この関数は、parsed-input-stringとその逆を比較します。両方が等しい場合はtrueを返します –

+0

もちろん!私はいつも、平等と厳密な平等比較が2つのコードを比較し、真実または偽の声明を返すことを常に忘れています。 –

0

回文でない場合は、ブール値として評価される文字列を返しますので、常に「真」を返すので機能しません。

1

「英数字」は、アルファベットと数字の両方を意味します。次のような方法を試してみてください。

function isPalindrome(str) { 
    str = str.toLowerCase().replace(/[^a-z0-9]+/g, ''); 

    return str === str.split('').reverse().join(''); 
} 

isPalindrome('racecar') 
// => true 

isPalindrome('race car') 
// => true 

isPalindrome('race caR') 
// => true 
関連する問題