それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

全角の英数を半角の英数に統一する(ただし、記号は除外)

全角を半角にする。

php で日本語の英数字(A-Z)を半角にしたいときは、文字コードのコードポイントを用いた計算ができる。

英数字だけを半角にしたいとき。

<?php
$v = 'Microso'
$v = preg_replace_callback('/[A-Za-z0-9]/u',function($s){
  $s = IntlChar::chr(IntlChar::ord($s[0]) - 0xFEE0);
  return $s;
},$v);

通常であれば mb_convert_kana

mb_convert_kana でもいいのだけれど、記号が変換されてしまう。

<?php
$v = 'Microso'
mb_convert_kana( $v , 'a')

ord ではなく、IntlChar::ordを使う理由

IntlChar::ord が必須。ord()はユニコード(utf8) の文字コードを計算できない。

配列の全てを半角にするには

filter_vars を使うと便利

<?php
 $arr_group =filter_var($section_group, FILTER_CALLBACK, ['options' => function ($v) {
                  $v = preg_replace_callback('/[A-Za-z0-9]/u',function($s){
                    $s = IntlChar::chr(IntlChar::ord($s[0]) - 0xFEE0);
                    return $s;
                  },$v);
                  return $v;
                }]);

全角半角の置換

全角半角の英数字の置き換えは、Unicode文字コードポイントをだして、 cp - 0xFEE0 をすればいい。これを覚えておけば、他のプログラム言語でも対応が可能になる。

参考資料