【正規表現】全角カタカナが含まれるかどうか判定する
問題
ある文字列に全角カタカナが含まれるかどうかを、正規表現で判定したいです。
phpだったらpreg_match関数とかで。
答え
<UTF-8 の場合>
//E382A1(ァ)~E382BF(タ)、E38380(ダ)~E383BE(ヾ) if (preg_match("/(\xe3\x82[¥xa1-¥xbf]|¥xe3¥x83[\x80-\xbe])/", $str)) { echo "全角カタカナが含まれます"; }else{ echo "全角カタカナが含まれません"; }
<UTF-8 の場合2>
UTF-8 のときは preg_match で u オプションをつけるのもよい。
//E382A1(ァ)~E382BF(タ)、E38380(ダ)~E383BE(ヾ) if (preg_match("/ァ-ヾ/u", $str)) { echo "全角カタカナが含まれます"; }else{ echo "全角カタカナが含まれません"; }
<EUC-JPの場合>
こうしてみたくなるが、
//ダメな例 //A5A1(ァ)~A5F6(ヶ)、A1B3(ヽ)、A1B4(ヾ)、A1BC(ー) if (preg_match("/^(¥xa5[¥xa1-¥xf6]|¥xa1[¥xb3¥xb4¥xbc])+$/", $str)) { echo "全角カタカナが含まれます"; }else{ echo "全角カタカナが含まれません"; }
$str = “ぅぅ” とき、「ぅ」の後ろ半分と次の「ぅ」の前半分でパターンにマッチしてしまうので、使えない。
EUC対応のmb関数を使うか、UTF-8に変換してから判定するのがいいでしょう。
コメント