• ベストアンサー

半角英数字のエラーチェック

if ( $input{'aaa'} !~ /^[A-Z]{2}$/ ) { &Error("エラー"); } 上の正規表現は 『半角アルファベット2桁以外だったら』 エラーという表現ですが、 『半角アルファベット2桁または半角アルファベット+数字一桁以外だったら』 エラーにしたいのですが、どのような記述をすればいいのか教えてください。 よろしくお願いします。

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

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

「半角アルファベット」って, 普通小文字も入りませんかね? さておきちと表現が微妙な気がする. 「半角アルファベット2桁または半角アルファベット+数字一桁以外」は ・「半角アルファベット2桁」でも「半角アルファベット+数字一桁」でもない ・「半角アルファベット2桁」か「半角アルファベット+数字一桁でない」 のどちらでしょうか? 前者なら $input{'aaa'} !~ /^[[:upper:]][[:upper:][:digit:]]$/, 後者なら $input{'aaa'} =~ /^[[:upper:]]{2}$/ or $input{'aaa'} !~ /^[[:upper:]][[:digit:]]$/ でしょうか. でも実は unless ($input{'aaa'} =~ /^[[:upper:]][[:upper:][:digit:]]$/) { &Error("エラー"); } と unless を使った方がきれいかもしれない.

ayako0401
質問者

補足

回答ありがとうございます。 わかりにくくてごめんなさい。 アルファベット2桁か、アルファベット2桁+数字一桁 以外 だったらエラーにしたいのです。具体的には、 ABまたはAB1だったら成功。それ以外だったらすべてエラーにしたいのです。 わたしの考えでは、 if ( $input{'aaa'} !~ /^[A-Z]{2}$ || ^[A-Z]{2}[0-9]{1}$/ ) { &Error("エラー"); } というふうに記述したのですがうまくいきませんでした。どうやって記述したらいいか教えていただけませんか。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (2)

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

「if ( $input{'aaa'} !~ /^[A-Z]{2}$|^[A-Z]{2}\d{1}$/ ) { &Error("エラー"); }」 と「『&error("もう一度入力してください")』のサブルーチンに飛んでしまいます。」 の関係が分からんのだけど, どうなっているんでしょうか? あと, そのようにエラーになる場合の $input{'aaa'} の値はどうなっていますか? ちょっと確認する限り, 正規表現としてはそれで OK です. 「最終的にどこまで短く書けるか」というのは #2 にありますけどね.

ayako0401
質問者

お礼

いろいろいじっていたらうまくできました! つたない説明ですいませんでした。 何度もすぐに返信いただきまして感謝しています! ありがとうございました!

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「わかりにくい」というか, この文面で「そう解釈しろ」ってのは無理. そのような正規表現の書き方をどこで知ったのかに興味があるなぁ. あと, #1 でも指摘したんだけど普通「半角アルファベット」には小文字も入りますよね? これはどうしますか? もう 1つ言うと, 単に「うまくいかない」というのは全く情報を持たない (質問しているくらいだから「期待したとおりに動いていない」のは当然) です. 状況が分かるように ・どのようなデータを与えたのか ・それに対しどのような動作を期待したのか ・実際の動作はどうであったのか をきちんと書いてください. さておき簡単なのは if ($input{'aaa'} !~ /^[[:upper:]]{2}\d?$/) { &Error("エラー"); } だと思う. 尤も, イメージとしては unless ($input{'aaa'} =~ /^[[:upper:]]{2}\d?$/) { &Error("エラー"); } とか $input{'aaa'} =~ /^[[:upper:]]{2}\d?$/ or &Error("エラー"); の方がいいかも.

ayako0401
質問者

補足

さっそく回答していただきありがとうございます。 アンケートフォームの入力を作っていまして、 ひとつのフォームの中に会員番号を入力させて、エラーでなければ 次のページで入力確認画面に飛ぶというプログラムを作っているんです。(こんな質問をするくらいですからCGI初心者です。) if ( $input{'aaa'} !~ /^[A-Z]{2}$|^[A-Z]{2}\d{1}$/ ) { &Error("エラー"); }とわたしなりに考えて書いたら 実際の動作は『&error("もう一度入力してください")』のサブルーチンに飛んでしまいます。 あとごめんなさいアルファベットは大文字のみです。 ABまたはAB1だったら会員として認識するので次ページの確認画面へ、 そうでなかったら会員でないので入力しなおして下さいとエラー画面を表示させたいのです。 ですから、『大文字アルファベット2桁』以外の入力だったらエラーとするには if ( $input{'aaa'} !~ /^[A-Z]{2}$/ ) { &Error("エラー"); } これでいけたのですが、 『大文字アルファベット2桁+数字1桁』の方も会員なので『大文字アルファベット2桁』または『大文字アルファベット2桁+数字1桁』だけOKにしたいのです。その記述の仕方がどうやっていいのかわかりません。 説明不足でごめんなさい…。

すると、全ての回答が全文表示されます。

関連するQ&A