• ベストアンサー

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

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

  • 半角英数字の判別

    お世話になります テキストフィールドにおいて半角英数字のチェックをしたいのですが・・・ 例えば『012ab』のような場合、 <script Language="JavaScript"> <!-- function checkText() { txt = document.myFORM.moto.value; if (txt.match(/[^a-z|^A-Z]/g)) alert("アルファベット以外が含まれてます"); } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkText()"> </form> では数字が入力されてるとalertされます function checkNum() { txt = document.myFORM.moto.value; for (i=0; i<txt.length; i++) { c = txt.charAt(i); if ("0123456789".indexOf(c,0) < 0) { alert("数値以外が含まれてます"); return; } } } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkNum()"> </form> ではアルファベットがあるとalertされてしまいます この2つをどのように組み合わせれば半角英数字以外であればalertされるようになるのでしょうか?

  • 正規表現について

    正規表現について質問をさせていただきます。 VB6.0にて正規表現を使用し、入力された文字のチェックを行っていますが どうしてもうまくいきません。 チェックしたい文字は A(半角アルファベット大文字1文字)または AAA(半角アルファベット大文字3文字)または (AAA)(半角カッコつき半角アルファベット大文字3文字)で 上記3パターン以外はエラーとしたいと思っています。 パターンは下記のように作成したのですが "(^[\(][A-Z]{3}[\)])|(^[A-Z]{1,3})" A、AAA、(AAA)以外でもA(AA)やAAAA等も正常ケースとして通過してしまいます。 パターンをどのように作成すればよいか教えて下さい。 よろしくお願いします。

  • PHPで半角英数、全角文字の組み合わせを許可する正規表現の記述方法を教

    PHPで半角英数、全角文字の組み合わせを許可する正規表現の記述方法を教えてください。 PHPで、ウェブサービスをUTF-8で構築中です。入力項目のうち、1項目を半角英数(0-9、a-z、A-Z)と全角文字の利用を許可したいと考えています。 正規表現を使って判断しようとし、検索して調べてました。しかし、半角英数のみとか、全角文字のみで構成されている場合、という例は見つかるのですが、半角英数と全角文字の複合のみをチェックする方法がわからずにおります。 この ・半角英数、または全角文字で構成されている という条件をチェックする記述方法を教えてください。 今回除外したいのは、半角の記号(0-9、a-z、A-Z以外の半角文字)ですので、 ・半角の記号が含まれている という条件をチェックする記述方法でもかまいません。 また、正規表現でなくても実現できるのであれば、正規表現にこだわる必要もありません。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 英数半角文字と「-」を指定する正規表現

    英数半角文字と「-」を指定する正規表現が なかなか解りません。 ([a-z\-]+) ([a-z,-]+) いずれもエラーになります。 どなかたご存知のかた、ご教授下さい。

  • 正規表現で半角数字1桁のみを全角数字に変換

    お世話になります。 JavaScript(JSP)で、 正規表現で半角数字1桁のみ(2桁以上は変換しない)を、 全角数字に変換する方法を教えてください。 たとえば、 ”hoge3hoge5”文字列内の、 半角数字1桁のみを、 正規表現で、全角数字1桁に、それぞれ変換   ↓ ”hoge3hoge5” あわせて、 半角数字が2桁以上、連続で続いている場合には 変換せずに、半角数字のままにしておきたいです。 ”hoge33hoge5”    ↓ 正規表現で、半角数字1桁のみを、全角数字1桁に変換 (半角数字2桁以上は変換しない) ”hoge33hoge5” 以上になります。 もしご存じの方がいらっしゃいましたら、 よろしくお願いします。

  • 半角数字以外の文字をチェックしたい

    現在、次のようなテキストフォーム(一部属性を省略)を利用しています。 <input onchange="if (!this.value) {return false;}" type="text" style="text-align: right; ime-mode: disabled;" /> onChange のときに、this.value に小数点を除く半角数字 ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") 以外の文字があると、false を返すようにしたいのですが、どう書けば可能しょうか。 正規表現を使うと思うのですが、まだ勉強中でよく分かりません。 よろしくおねがいします。

  • なぜ英数字を半角にする人が多いのか?(なぜ英数字以外の記号は半角にしないのか?)

    ネット上を見てると、英数字……取り分け数字は、 どんな場合でも(1桁でも2桁でも関係なく)半角にしている人が多いように思えます。 これはなぜでしょうか? 「それは昔からの決まりだから。」と聞いたことがあるのですが、 そういう人の中には、僕が思うに英数字を半角にしているだけで、 「!」「?」「#」「&」など、カタカナ以外の半角にできる記号を、半角にしていない人がいるんです。 これっておかしいと思います。 おそらく英数字を半角にするのが昔からの決まりだったのは、 昔のパソコンを使っていた人の多くが1バイト文字を使っていたからでしょうし……。 それなら、カタカナは別として、英数字だけでなく、他のすべての記号を半角入力するべきだと思います。 英数字だけ半角なんて、絶対中途半端だし、変です。 「英数字だけ半角にするのに、他の記号は半角にしない理由。」 回答お待ちしております。

  • PHP 全角・半角・英数字 エラー判定

    PHPを独学で勉強しているものです、あるサイトを構築中で、入力内容のエラー判定をしたいのですが、どうしても半角英字がエラーではじかれず、どなたかご指導いただけますでしょうか。 PHPのバージョンは5.2で、DBはMySQLでユーザーがある情報を登録できるサイトで、データ型にあわせるため、1以上の半角数字のみ受け付けるようにしたいです。 入力欄は3か所で、$ic0、$ic1、$ic2に格納されています。 入力が全角数字の場合はそれぞれを半角数字に自動変換したいとおもっています。 自作したものは下記の通りです。 宜しくお願い致します。 /*エラー判定*/ $ic_check=$ic0.$ic1.$ic2; if(preg_match("/^[0-9]+$/", $ic_check)){ if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[0-90-9]+$/",$ic_check)){ $ic0=mb_convert_kana($ic0, "n", "Shift_jis"); $ic1=mb_convert_kana($ic1, "n", "Shift_jis"); $ic2=mb_convert_kana($ic2, "n", "Shift_jis"); if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[a-zA-Z]+$/",$ic_check)){ $error_msg="半角数字で入力してください"; } else{ $error_msg="半角数字で入力してください"; }

    • ベストアンサー
    • PHP
  • 複数メールアドレスのチェック

    現在、phpにてメールフォームを制作していますが、送信先に複数メールアドレスを指定した際の正規表現でチェックしたいと思っているのですが、全く分かりません。 正規表現で「preg_match("/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i",$value)」としていますが、「aaa@aa.aa,bbb@bb.bb」などカンマでメールアドレスを複数(1~5アドレスを想定)区切った場合、エラーが出てしまいます。 どのようにしたら、うまくいくか教えていただけないでしょうか? 色々と調べましたがわかりません。 大変申し訳ないですが、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現 半角英数字が混じっている場合

    正規表現について教えてください。 入力フォームより都道府県を入力した際に、 "東京都AAS421SBBss" や "AA1sss東京都" など、一部に半角英数字が含まれている場合、 どのような正規表現でマッチするのでしょうか? if(!preg_match("/[\xA1-\xFE][\xA1-\xFE]/",$address)) 感じで行ったのですが、最初に半角英数字だとマッチするのですが、 途中に半角英数字がある場合、マッチしなかったりと。 よろしくお願いいたします。

    • 締切済み
    • PHP