【PHP】正規表現を使わずに半角チェック
2018-09-12
2020-05-18
英数字チェックとか半角チェックとか取り込まれるデータが不明な場合よくチェックをすると思います。チェックをすると大体正規表現が出てくると思いますが、正規表現を使わずともチェックする方法があるので紹介します。
仕様
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は関数がたくさんあって便利ですね。
関連記事
【iPhone】SIMフリーでY!モバイルにしたけどインターネットに繋がらない対処法
「○○できる?」と上司に聞かれたらなんと答えるのが正解なのか
未経験プログラマー物語【第四章 アンケートサイト開発編③】タイムリミットは22時
仕事が遅いプログラマーを観察してみる
『現場で役立つシステム設計の原則』を読みました
MySQLの名前の由来が「私のSQL」じゃないと知って驚いた話
未経験プログラマー物語【第三章 テスター編⑦最終章】次の現場へ
『お金のこと何もわからないままフリーランスになっちゃいましたが税金で損しない方法を教えてください!』を読みました。
現役エンジニアの案件動画を視聴して。
Windows10にC/C++コンパイラ(gcc)をインストールする