• ベストアンサー

文字列チェック

ご教授下さい。 cgiにて、 ・全角カナ ・全半角数値 のみを許可するようなチェックルーチンが必要なのですが、 正規表現でどのように記述すればよいかわかりません。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

Perl メモに代表的なパターンの例が載っていますので、それを組み合わせるだけです。 Perlメモ 文字の正規表現 http://www.din.or.jp/~ohzaki/perl.htm#Character # 全角数字 [0-9] $Zdigit = '(?:\xA3[\xB0-\xB9])'; # EUC-JP # 全角アルファベット [A-Za-z] $Zalphabet = '(?:\xA3[\xC1-\xDA\xE1-\xFA])'; # EUC-JP # 全角カタカナ [ァ-ヶ] $Zkatakana = '(?:\xA5[\xA1-\xF6])'; # EUC-JP 半角の数字 は \d です([0-9]でもよいですが) 面倒なのでPerlに組み立てさせます。 use strict; use warnings; use Regexp::Assemble; my $Zdigit = '(?:\xA3[\xB0-\xB9])'; my $Zalphabet = '(?:\xA3[\xC1-\xDA\xE1-\xFA])'; my $Zkatakana = '(?:\xA5[\xA1-\xF6])'; my $r1 = Regexp::Assemble->new; $r1->add('\d'); $r1->add($Zdigit); print $r1->re, "\n"; my $r2 = Regexp::Assemble->new; $r2->add($Zalphabet); $r2->add($Zkatakana); print $r2->re, "\n"; (?-xism:(?:(?:\xA3[\xB0-\xB9])|\d)) (?-xism:(?:(?:\xA3[\xC1-\xDA\xE1-\xFA])|(?:\xA5[\xA1-\xF6]))) という答えになりました。 今回は一番外側のカッコは取り除けますので、 (?:(?:\xA3[\xB0-\xB9])|\d) (?:(?:\xA3[\xC1-\xDA\xE1-\xFA])|(?:\xA5[\xA1-\xF6])) ですね。 検査したい文字列に対して、 $inputstr =~ /^(?:(?:\xA3[\xB0-\xB9])|\d)+$/ がマッチに成功すればその文字列の中身はすべて全半角の数字になります。 同様に $inputstr =~ /^(?:(?:\xA3[\xC1-\xDA\xE1-\xFA])|(?:\xA5[\xA1-\xF6]))+$/ がマッチに成功した場合、その文字列の中身は全角カナになります。

rabaraba
質問者

お礼

こんなに詳しくありがとうございます! おかげさまで、できました! 機会がありましたら、また宜しくお願い致します。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

[全角カナと半角または全角数字]って書けばいいような気がする. とっても長いけど.

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

スクリプトを記述するのに使用するエンコーディングと 対象のバージョンを教えてください。 > ご教授下さい。 教示です。

rabaraba
質問者

補足

すいません。 ・EUC-JP ・perl 5.8.0 です。 お願いします。

関連するQ&A