SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【正規表現】全角カタカナが含まれるかどうか判定する

問題

ある文字列に全角カタカナが含まれるかどうかを、正規表現で判定したいです。

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に変換してから判定するのがいいでしょう。

関連するメモ

コメント