- 締切済み
java 全角判定ができなくて困っています。
今年javaを習いだした初心者です。 現在java servletでユーザの登録画面の作成をしており、 ユーザ名を入力した際に、半角英数字での入力ならばtrue、全角文字での入力であればfalseでエラーを表示したいのですがうまくいきません。 どなたかご教授いただけませんでしょうか? ソースは下記のとおりとなります。 よろしくお願いいたします。 import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletUsersRegistrationScreen extends HttpServlet{ String url = "xxxx” String user = "xx"; String password = "xx"; PrintWriter out; Statement statement; HttpSession session; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { Connection conn = null; try{ // DBに接続 Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url,user,password); }catch( Exception e ) { // エラー画面 response.sendRedirect("error.html"); return; } request.setCharacterEncoding("Windows-31J"); response.setContentType("text/html; charset=Windows-31J"); try{ // インスタンス変数の設定 statement = conn.createStatement(); out = response.getWriter(); session = request.getSession(); //HTMLの出力 out.println("<html>"); out.println("<head>"); out.println("<title>書籍検索システム</title>"); out.println("</head>"); out.println("<body>"); out.println("<left>"); out.println("<p><h1>書籍検索システムの新規登録</h1></p>"); out.println("<p>書籍検索システムのサービス(書籍検索・書籍登録)をご利用いただけます。</p>"); out.println("<p>入力項目はすべて必須です。</p>"); out.println("<fieldset style=\"width:400;height:270;\">"); out.println("<legend>入力する項目</legend>"); //既にユーザー名が登録されている String message = (String)session.getAttribute("ERR_FAILURE"); if(message != null) { out.println("<p><Font Color=\"#ff0000\">"+message+"</Font></p>"); session.setAttribute("ERR_FAILURE", null); } //ユーザー名が入力されていない String message1 = (String)session.getAttribute("ERR_USERNAME"); if(message1 != null){ out.println("<p><Font Color=\"#ff0000\">"+message1+"</Font></p>"); session.setAttribute("ERR_USERNAME", null); } //パスワードが入力されていない String message2 = (String)session.getAttribute("ERR_PASSWORD"); if(message2 != null){ out.println("<p><Font Color=\"#ff0000\">"+message2+"</Font></p>"); session.setAttribute("ERR_PASSWORD", null); } //(再入力)パスワードが入力されていない String message3 = (String)session.getAttribute("ERR_CONFPASSWORD"); if(message3 != null){ out.println("<p><Font Color=\"#ff0000\">"+message3+"</Font></p>"); }} //パスワードと(再入力)パスワードが一致しない String message4 = (String)session.getAttribute("ERR_MISSMACH"); if(message4 != null){ out.println("<p><Font Color=\"#ff0000\">"+message4+"</font></p>"); session.setAttribute("ERR_MISSMACH",null); } //ユーザー名入力数制限の20文字をオーバー String message5 = (String)session.getAttribute("ERR_20OVER"); if(message5 != null){ out.println("<p><Font Color=\"#ff0000\">"+message5+"</font></p>"); session.setAttribute("ERR_20OVER",null); } //パスワードが6文字未満8文字以上 String message6 = (String)session.getAttribute("ERR_6UNDER8OVER"); if(message6 != null){ out.println("<p><Font Color=\"#ff0000\">"+message6+"</font></p>"); session.setAttribute("ERR_6UNDER8OVER",null); } //半角英数判定 String message7 = (String)session.getAttribute("ERR_MISSSPELL"); if(message != null){ out.println("<p><Font Color=\"#ff0000\">"+message7+"</font></p>"); session.setAttribute("ERR_MISSSPELL",null); } out.println("<form method=\"POST\" action=\"Servl
- みんなの回答 (2)
- 専門家の回答
みんなの回答
「半角英数字かどうか」を判定する際に、 私は"正規表現"という機能をよく使います。 文字列が特定のパターン当てはまるか手軽にチェックでき、 Stringクラスのメソッド"matches"として用意されています。 今回のケースでは、まずチェックに使う パターンの文字列を次のように用意します。 String pattern ="[A-Za-z]+"; ↑ 半角のA~Zまたはa~zのいずれかの1文字を使って 構成されている文字列(1文字以上)、を表しています。 たとえば"AbC"このパターンに当てはめると、 各文字("A"、"B"、"C")はすべてA~Zまたは a~zの範囲内なのでパターンにマッチしている (true)と判定されます。 一方"Ab4"の場合、3文字目"4"がパターンになく これはアンマッチしている(false)と判定されます。 あとはチェックしたい文字列変数のmatchesメソッドに、 パターンを渡してあげればtrue/falseが獲得できます。 ユーザー("user")なら以下のような感じです。 boolean bool = user.matches(pattern); あとはこの結果でメッセージの表示有無を 判定すればいいと思います。
- salsberry
- ベストアンサー率69% (495/711)
> //半角英数判定 > String message7 = (String)session.getAttribute("ERR_MISSSPELL"); > if(message != null){ このif文での判定はmessage7じゃなくていいのですか?