2011年08月04日

Perlで「半角文字が入ってない」チェックをする

全角文字しか受け付けません、というシステムにデータを渡す必要があり、半角文字が含まれないことを確認するためにこんなPerlコードを書いてみた。

contains_hankakuは、半角プリンタブル文字が含まれるかどうかをチェックするコード。全角しか受け付けない、のチェックには不十分なのだけど、手入力ミスを弾くならこんな感じか。

zenkaku_onlyは、より厳密に全角限定を確認するコード。EUCにして「0xA1 - 0xFE」しか出てこないことを確認するようにしている。

------------------------
#!/usr/bin/perl


use Jcode;

my $invalid = "(あ)";
my $valid = "(あ)";


if ( &contains_hankaku($invalid) ) {print "invalidには半角がある\n";}
if ( &contains_hankaku($valid) ) {print "validには半角がある\n";}
if ( &only_zenkaku($invalid) ) {print "invalidは全角オンリーだ\n";}
if ( &only_zenkaku($valid) ) {print "validは全角オンリーだ\n";}
exit(0);


## EUCに変換してからチェック。半角プリンタブルコードはEUC全角には出てこない
sub contains_hankaku
{
my $str = shift;
my $euc = jcode($str)->euc;

if ( ($euc =~ /[\x20-\x7e]/) == undef) {return 0;}
else {return 1;}
}

## EUC全角の、0xA1 - 0xFEの間しか出てこないことを確認
sub only_zenkaku
{
my $str = shift;
my $euc = jcode($str)->euc;

if ( ($euc =~ /[\x0-\xA0]/) == undef && ($euc =~ /\xFF/) == undef) {return 1;}
else {return 0;}
}
posted by へろ at 12:56 | Comment(1) | TrackBack(0) | コンピュータ
この記事へのコメント
Many thanks for an amazing publish, may read your particular others posts. thank you your thinking on this, I soon became a lttle bit made an impact to by this article. Thanks again! You earn a good time. Has wonderful data here. I believe if more people thought of it doing this, they’d possess a better time period receive the hold ofing the matter.
Posted by maillot de foot pas cher at 2013年06月27日 15:57
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/47145047

この記事へのトラックバック