プロが教える店舗&オフィスのセキュリティ対策術

こんにちわ、初心者プログラマーの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メソッドをやはり使うのでしょうがどう書けばいいのか・・・汗

本当に初心者な質問で申し訳ないのですがご教授下さいませんでしょうか。
ヒントでもかまいませんのでご回答いただければ幸いです、宜しくおねがい
致します。

A 回答 (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"); };

};

}
    • good
    • 0

1,2の文字列のパターンチェックでしたら正規表現ライブラリを使いましょう。


超楽です。(正規表現を理解する必要がありますが。)

JavaWorld 2001/4月号,8月号に特集されていました。
Java関連で仕事をなされているのなら
周りの誰かが持っているでしょう。


3の長さチェックは、可能ならまずMAXLENGTHで制限して、
さらに文字列の長さをチェックすればいいでしょう。

参考URL:http://jakarta.apache.org/oro/index.html
    • good
    • 0

こんにちは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;
}

これは適当に作った物なんでもっといい方法とかあると思います。
漢字が入力された場合とかも全然考慮に入れてません。
参考程度にとどめてもらえればよいかと思います。
それでは、がんばってください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!