JavaScriptで英数字のみを対象に回文を判定するプログラムの作成方法
回文(Palindrome)とは
回文とは、前から読んでも後ろから読んでも同じになる単語・フレーズ・数値のことです。英語の例には「madam」や「nurses run」などがあり、日本語でも「しんぶんし」「たけやぶやけた」などがよく知られています。
本記事では、正規表現を活用して英数字のみを判定対象とする回文チェックプログラムを解説します。組み込みの正規表現パターン「\W」を利用すれば、記号や空白などの余計な文字を簡単に除外できます。回文かどうかの判定は、以下の手順に沿って行います。
回文判定の手順
- まず、文字列内のすべての文字を小文字に変換します。
- 次に、英数字以外の文字を取り除きます。この処理には、組み込みの正規表現パターン「\W」を使う方法と、独自の正規表現(例:/[^a-zA-Z0-9]+/g)を定義する方法があります。
- replace()メソッドを使って、英数字以外の文字を空文字("")に置き換えます。
- 不要な文字を除去した文字列が、前から読んでも後ろから読んでも同じになるかを確認します。
- split()・reverse()・join()を組み合わせて文字列を反転し、元の文字列と比較します。
- 両者が一致していればtrue、一致していなければfalseが出力されます。
以下の例では、「*」や「&」などの記号が含まれる文字列を引数として渡しても、プログラムは英数字のみを抽出して回文判定を行い、その結果を出力します。
コード例
<html>
<body>
<script>
function palindrome(str){
var reg = /[\W_]/g; // 「\W」の代わりに「/[^a-zA-Z0-9]+/g」も利用可能
var smstr = str.toLowerCase().replace(reg, "");
var reversed = smstr.split("").reverse().join("");
if(reversed === smstr){
document.write("true");
}
else {
document.write("false");
}
}
palindrome("a929a*/(';-=,.*")
</script>
</body>
</html>出力結果
true
入力文字列には複数の記号が含まれていますが、正規表現によってこれらが除去され、英数字だけで構成された「a929a」のみが判定対象になります。前後どちらの方向から読んでも同じ文字列であるため、結果としてtrueが出力されます。
-
JavaScriptで文字列内の2つ以上の連続スペースを1つのスペースに変換する方法
概要 HTMLの入力欄からユーザーが入力した文字列をJavaScriptで受け取り、その中に含まれる「2つ以上の連続した空白」を検出し、すべて1つのスペースに置き換えるプログラムを作成します。このような処理には正規表現を使うのが最もシンプルで確実な方法です。replace()メソッドの第1引数に正規表現 /\s{2}/g を指定することで、目的の結果を簡単に得られます。 使用する正規表現のポイント \s:半角スペース・タブ・改行などの空白文字にマッチします。 {2}:直前のパターンが2回以上連続する場合にマッチします。 g(グローバルフラグ):文字列内のすべての該当箇所を置換対象にします。
-
C#で文字列が回文かどうかを確認するプログラムの作成方法
文字列が回文(パリンドローム)かどうかを確認するには、まず文字列を反転させる必要があります。これには Array.Reverse() メソッドを使用します。 Array.Reverse() 次に、Equals() メソッドを使って、元の文字列と反転後の文字列を比較します。比較結果が true であれば、その文字列は回文であると判断できます。 それでは、完全なサンプルコードを見てみましょう。ここでは「Madam」という文字列を使用します。「Madam」は、逆から読んでも同じ並びになる代表的な回文です。 サンプルコード using System; namespace Demo { cla