PHPで半角チェックを正規表現を使わず実装

英数字チェックとか半角チェックとか取り込まれるデータが不明な場合よくチェックをすると思います。チェックをすると大体正規表現が出てくると思いますが、正規表現を使わずともチェックする方法があるので紹介します。

仕様

input: 全角文字

もしinputが英数字の場合半角文字にして返却。英数字以外が混じっていたら不正な文字のため『xxxxx』を返却する。

サンプルソース


public function halfCheck()
{
  $fullwidth = "abc12";

  // 全角文字を半角文字に変換
  $changeResult = mb_convert_kana($fullwidth, "a");

  // 半角に変換した文字の長さと幅を変数化
  $strlen = mb_strlen($changeResult, "UTF-8");
  $strwidth = mb_strwidth($changeResult, "UTF-8");

  if($strlen == $strwidth) {

    // 半角の場合
    return $changeResult;

  } else {

    // 全角が混じっている場合
    return "xxxxx";
}

// 実行結果
abc12


 

解説

まず6行目のmb_convert_kanaで全角文字を半角文字へ変換します。この時引数により半角文字へ変換する文字種を指定できます。ちなみに”a”は英数字が対象になります。

次に変換した文字に対し、9行目のmb_strlenで長さの値を、10行目のmb_strwidthで幅の値を取得します。文字コードはしっかり合わせます。

mb_strlenはシングルバイト文字・マルチバイト文字ともに1としてカウント。
mb_strwidthは原則シングルバイト文字=1、マルチバイト文字=2としてカウントします。

例えば『12abあ』という文字があったとします。この場合

$strlenはバイト長を返すので5(5文字のため)

$strwidthは6(『12ab』がそれぞれ1バイト、『あ』が2バイトのため)が返ります。結果不一致のため『12abあ』はelseに入ります。

文字のバイト数を比較することで正規表現を使わなくても上手いこと半角チェックができますね。

PHPは関数がたくさんあって便利ですね。

 

スポンサーリンク

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です