- ベストアンサー
文字列チェック
ご教授下さい。 cgiにて、 ・全角カナ ・全半角数値 のみを許可するようなチェックルーチンが必要なのですが、 正規表現でどのように記述すればよいかわかりません。 宜しくお願い致します。
- みんなの回答 (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]))+$/ がマッチに成功した場合、その文字列の中身は全角カナになります。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
[全角カナと半角または全角数字]って書けばいいような気がする. とっても長いけど.
- sakusaker7
- ベストアンサー率62% (800/1280)
スクリプトを記述するのに使用するエンコーディングと 対象のバージョンを教えてください。 > ご教授下さい。 教示です。
補足
すいません。 ・EUC-JP ・perl 5.8.0 です。 お願いします。
お礼
こんなに詳しくありがとうございます! おかげさまで、できました! 機会がありましたら、また宜しくお願い致します。