• 締切済み

入力された文字列の制限

こんにちわ、初心者プログラマーのRammyと申します。 現在webで使うツールを開発中なのですが、web上にある入力フォーム内に 入力された文字列について、 1.半角英数字及び_-.のみ入力可能にする(メールアドレス判断用) 2.半角数字のみ入力可能にする(電話番号などの判断用) 3.文字列の長さをチェックし、一定の長さを超えたら送信させない 以上の入力制限処理をJAVAで行いたいのです。 現在、空白チェックのみ、チェック用のBeansを作成し、その中に public static boolean checkBlank(){  if (kind == null || user_name == null  || mail1 == null || mail2 == null  || tel == null || subject == null || text == null ) {  return false; }  if (kind .compareTo("") == 0 || user_name.compareTo("") == 0  || mail1.compareTo("") == 0 || mail2.compareTo("") == 0  || tel.compareTo("") == 0 || subject.compareTo("") == 0  || text.compareTo("") == 0 ) {  return false; } return true; } このように記述してありますが、Beans内に上記の1~3の機能をつけたし たいのです。が、いったいどのように記述したらいいのかわかりません。 1・2に関しては、入力可能な文字をあらかじめ決めておいて、入力された 文字列を分解し、入力可能文字と一致するかどうか判断する、というイメージ はできるのですが、どう書いたらいいものかわからないのです汗 3は、lengthメソッドをやはり使うのでしょうがどう書けばいいのか・・・汗 本当に初心者な質問で申し訳ないのですがご教授下さいませんでしょうか。 ヒントでもかまいませんのでご回答いただければ幸いです、宜しくおねがい 致します。

  • Rammy
  • お礼率33% (2/6)
  • Java
  • 回答数3
  • ありがとう数3

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.3

 横に判定するのではなく縦に判定すれば見通しがよくなると思います。 以下の例は、フォームから入力した文字列の長さと使用文字種を判定して結果を返すページとサーブレットの例です。 -----ページ----- <html> <head><title>Data Input</title></head> <body> <form action="http://localhost:8080/minnaservlet/171847" method="GET"> <script> var name = new Array("kind", "user_name", "mail1", "mail2", "tel", "subject", "text"); for (var i = 0; i < name.length; i ++) document.writeln(name[i] + "<input type='text' name='" + name[i] + "'><br>"); </script> <input type="submit" value="send"> </form> </body> </html> -----サーブレット----- import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class strcheck extends HttpServlet { private boolean TelCheck(String s) { if (!BlankCheck(s, 10)) return(false); return(s.matches("[0-9]*")); }; private boolean AddrCheck(String s) { if (!BlankCheck(s, 20)) return(false); return(s.matches("[[0-9][a-z][A-Z][-_.@]]*")); }; private boolean BlankCheck(String s, int l) { if (s == null) return(false); if ((s.compareTo("") == 0) || (s.length() > l)) return(false); return(true); }; public void doGet(HttpServletRequest req, HttpServletResponse res) { String kind = req.getParameter("kind"); String user_name = req.getParameter("user_name"); String mail1 = req.getParameter("mail1"); String mail2 = req.getParameter("mail2"); String tel = req.getParameter("tel"); String subject = req.getParameter("subject"); String text = req.getParameter("text"); try { res.setContentType("text/html"); PrintWriter PW = res.getWriter(); PW.println("<html><head><title>Check</title></head>"); PW.println("<body><h1>"); if (BlankCheck(kind, 1) && BlankCheck(user_name, 10) && AddrCheck(mail1) && AddrCheck(mail2) && TelCheck(tel) && BlankCheck(subject, 100) && BlankCheck(text, 100)) PW.println("Input OK"); else PW.println("Input NG"); PW.println("</h1><br></body></html>"); } catch (Exception ex) { System.out.println(ex.toString()+ "::Get"); }; }; }

  • yuji
  • ベストアンサー率37% (64/169)
回答No.2

1,2の文字列のパターンチェックでしたら正規表現ライブラリを使いましょう。 超楽です。(正規表現を理解する必要がありますが。) JavaWorld 2001/4月号,8月号に特集されていました。 Java関連で仕事をなされているのなら 周りの誰かが持っているでしょう。 3の長さチェックは、可能ならまずMAXLENGTHで制限して、 さらに文字列の長さをチェックすればいいでしょう。

参考URL:
http://jakarta.apache.org/oro/index.html
  • syunpon
  • ベストアンサー率42% (9/21)
回答No.1

こんにちはRammyさん。 Beansは使った事無いのでわかりませんが、文字列のチェックならこんな感じでいかがでしょう? 1.メールアドレスのチェック public boolean chkMail(String str){  byte temp[] = str.getBytes();  boolean atmark = false;  if ( temp[0] < 97 || 122 < temp[0] ) return false;  for ( int i = 1; i < temp.length; i++) {   if ( 97 <= temp[i] && temp[i] <= 122 || temp[i] == 45) {    ;   } else if ( 64 == temp[i] ) {    if (atmark == true ) {     return false;    } else {     atmark = true;    }   } else if (atmark == true && 46 == temp[i] ){    ;   } else {    return false;   }  }  if (atmark == false ) return false;  return true; } 2.半角数字のチェック public boolean chkNumber(String str){  byte temp[] = str.getBytes();  for ( int i = 0; i < temp.length; i++) {   if ( 48 <= temp[i] && temp[i] <= 57){    ;   } else {    return false;   }  }  return true; } 3.文字数のチェック public boolean chkLength(String str){  if ( 文字数 <= str.length() ) {   return false;  }  return true; } これは適当に作った物なんでもっといい方法とかあると思います。 漢字が入力された場合とかも全然考慮に入れてません。 参考程度にとどめてもらえればよいかと思います。 それでは、がんばってください。

関連するQ&A

  • テキストボックスに「00000」を入力すると「0」になってしまう

    あるテキストボックスには5桁の半角数字を入力させるようにしたいと思っています。 このテキストボックスには以下の入力チェックをかけていますが、「00000」を入力すると「0」と判断されてしまい。一つ目のチェックに引っかかってしまいます。 これを文字列として判断する方法はありますか? または、以下のチェックに引っかからない方法はありますか? よろしくお願いいたします。 (codeにはvalueが入っています。) if(code == 0){ alert("入力してください。"); return false; } if(isFinite(code) == false){ alert("半角数字を入力してください。"); return false; } if(code.length != 5){ alert("5桁入力してください。"); return false; }

  • 文字列の比較

    いつも参考にさせて頂いています。 基本的なことなのですが、宜しくお願いします。 たとえば文字列"str"の空チェックをするとします。 -------------------以下参考ソース String str = "test"; 1. public static String isBlank(String str) { if(str == null || str.equals("")) { return true; } return false; } 2. public static String isBlank(String str) { if(str == null || str.length = 0) { return true; } return false; } ■1と2の違いって何かありますでしょうか? ■空チェックなら1と2のどちらを使うべきでしょうか? 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • 文字列に空白を含んだ場合の処理

    現在、文字列の入力チェックの関数を作成しています。 function checkMemberId() { if(document.form1.memberId.value==undefined){ alert("番号を入力してください。"); return false; }else if(??????????){ alert("空白が含まれています。"); return false; }else { alert("半角数字を入力してください。"); return false; } } 上記の else if の条件に、document.form1.memberIdに空白を含んだ文字列が入力されたらアラートメッセージを出すという処理を記述したいのですが、どういう処理を記述すればよいのでしょうか。 空白は全角・半角とも対象で、すべて空白が入力された時も同様の処理にしたいです。 以下、該当のHTML部です。 <form name="form1"> <input type="text" name="memberId"> </form> 以上、よろしくお願い致します。

  • 文字列入力について

    いつも大変お世話になってます。 文字列の扱いがどうも苦手なようなのでまた教えていただきに参りました。 今回は文字列の最大長を指定せずに入力時に幾らでも書けるプログラムを書きたいと思ってます。 int main() { ↓★最大長を指定しない char* buff=""; //初期化 printf("文字列入力\n"); if(gets_s(buff,sizeof(buff)-1) == NULL){ printf("NULL\n"); } ~~~~別処理~~~~ printf("%s\n", buff); return 0; } 文字列を入力したところで別処理に入る前にエラーが出て強制終了します。 aaa.exe の 0x10259554 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00415986 に書き込み中にアクセス違反が発生しました。 こういったエラーはポインタの扱い方に誤りがあるのでしょうか? また、最終的に文字列の最大長を指定せずに宣言し、入力できるように するにはどのようにしたらよろしいのでしょうか?

  • 文字列

    ・文字列をキーボードから入力する関数を作成する。 書式:char *StrInp(char *pDefStr, int nLen); 引数:char *pDefStf; 初期文字列 int nLen; 入力可能文字数(1~79) 戻り値:正常ならば、入力した文字列の先頭ポインタ、エラー時はNULL。 処理:pDefStrに与えた文字列を初期値とする文字入力を行う。    nLenで指定した文字数まで入力可能とし、その範囲は1~79    までする。入力時の初期カーソル位置は与えた文字列の最後    になります。初期文字列が必要ない場合はヌル文字を与えます。    初期文字列を与えられた場合は、その文字列も更新可能とする。   ・入力の終了は「リターン」キーとする。   ・「BS」キーを押すと、カーソルの1文字前の文字前の文字を    消去する。 という、問いです。難しくてわかりません。どなたかたすけてください。        

  • エクセルでのNULLという文字列挿入について

    エクセルで空白のセルに対してNULLという文字列を挿入したいのですが、 SUBSTITUTE関数を使ってやろうとたらNULLは0と判断されて0が入力されてしまいます。 NULLという意味ではなくて、NULLという文字列そのものを入力するときはどのようにしたらよいのでしょうか?

  • DataGridView 列ごとの入力制限

    VB2005環境です。 DataGridViewコントロールの、列ごとに入力制限をかけたいと 思っています。 たとえば、1列目は数字のみ入力可能、2行目は半角英数字…と いった具合です。 また、できればある列にはIMEMODEを設定してやりたいとも 思っています。 KeyDownイベントで、列の名前ごとにif文をかまして、文字を弾けば いいかと思っていたのですが、思ったより手間で、コピペでの入力 には対応できません。 プロパティでなんとかならないかと思ったのですが、デザイナからは そのようなものは見つかりませんでした。 何かシンプルに入力制御をかけられる方法はないでしょうか? ご教授お願いいたします。

  • 半角カタカナの入力チェックを作りたいです

    入力フォームで入力された文字に対して半角カタカナかチェックをしたいです。 function CheckHalfSizeKatakana($str) {  if (mb_ereg("^[ア-ン゛゜]+$",$str)) {    return true;  } else {    return false;  } } としたのですがうまくいきません。 PHP4です。

    • ベストアンサー
    • PHP
  • Javascriptでの文字制限の質問です。

    ・全角の (株)Tel 以外の文字は入力可能 ・半角のカタカナ、半角の中点 以外の文字は入力可能 以上の制限はどのように書いたらいいんでしょうか?

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl