検索条件
全1件
(1/1ページ)
よくネットショップ等で買い物をすると
郵便番号は半角で入力してください。
とか言われてウザくないですか? こういうのを解消するためのルーチンです。
ソースは必ずutf-8で保存してください。
use utf8; use Encode (); sub utf8_zen2han { my $str = shift; my $flag = utf8::is_utf8($str); Encode::_utf8_on($str); $str =~ tr/ !”#$%&’()*+,-./0-9:;<=>?@A-Z[¥]^_`a-z{|}/ -}/; if (!$flag) { Encode::_utf8_off($str); } return $str; }
実行例。
(変換前)abcdefgさささ110-2244あいう##$” (変換後)abcdefgさささ110-2244あいう##$"
use utf8; use Encode (); my %hankana_map = ( 'ガ'=>'ガ','ギ'=>'ギ','グ'=>'グ','ゲ'=>'ゲ','ゴ'=>'ゴ', 'ザ'=>'ザ','ジ'=>'ジ','ズ'=>'ズ','ゼ'=>'ゼ','ゾ'=>'ゾ', 'ダ'=>'ダ','ヂ'=>'ヂ','ヅ'=>'ヅ','デ'=>'デ','ド'=>'ド', 'バ'=>'バ','ビ'=>'ビ','ブ'=>'ブ','ベ'=>'ベ','ボ'=>'ボ', 'パ'=>'パ','ピ'=>'ピ','プ'=>'プ','ペ'=>'ペ','ポ'=>'ポ', 'ヴ'=>'ヴ'); sub utf8_hankana2zen { my $str = shift; my $flag = utf8::is_utf8($$str); Encode::_utf8_on($$str); $str =~ s/(ガ|ギ|グ|ゲ|ゴ|ザ|ジ|ズ|ゼ|ゾ|ダ|ヂ|ヅ|デ|ド|バ|ビ|ブ|ベ|ボ|パ|ピ|プ|ペ|ポ|ヴ)/$hankana_map{$1}/g; $str =~ tr/。-゚/。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜/; if (!$flag) { Encode::_utf8_off($str); } return $str; }
今更使いませんが、EUC-JPの場合は標準モジュールでもできます。逆変換は Encode::JP::H2Z::z2h()。
use Encode (); use Encode::JP::H2Z (); sub eucjp_hankana2zen { my $str = shift; Encode::JP::H2Z::h2z(\$str); return $str; }
バグ等あったらコメントください。