RikuMoto
@RikuMoto (Riku Moto)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

パラメーターに対して全角カタカナと半角英数字ならtrueにしたいができない

解決したいこと

入力されたパラメーターに対して、全角カタカナと半角英数字チェックを行いたい
カタカナで入力されたらチェックに引っかからず処理をおえる
半角英数字で入力されたらチェックに引っかからず処理をおえる
このようにしたいです。

発生している問題・エラー

パラメーターを全角カタカナでチェックしそこでtrueなら処理を終わらせたいが、次の条件分岐半角英数字チェックでひっかかってしまう。

error.java
String str[] = {code,name,price};
String error = "";
for(int i = 0; i < str.length; i++){
			try {
				//nullチェック
				if (!(str[i].isEmpty())) {
					//全角カタカナチェック
					if (str[i].matches("^[ァ-ヶー]*$")) {
						;
					}else{
						switch (i) {
						case 0:
							String code_error = "商品コードをカタカナ全角で入力してください";
							request.setAttribute("code_error", code_error);
							break;
						case 1:
							String name_error = "商品名をカタカナ全角で入力してください";
							request.setAttribute("name_error", name_error);
							break;
						case 2:
							String price_error = "単価をカタカナ全角で入力してください";
							request.setAttribute("price_error", price_error);
							break;
						}
						throw new Exception();
					}
					if (str[i].matches("^[A-Za-z0-9]+$")) {
						;
					}else{
						switch (i) {
						case 0:
							String code_error = "商品コードを半角英数字で入力してください";
							request.setAttribute("code_error", code_error);
							break;
						case 1:
							String name_error = "商品名を半角英数字で入力してください";
							request.setAttribute("name_error", name_error);
							break;
						case 2:
							String price_error = "単価を半角英数字で入力してください";
							request.setAttribute("price_error", price_error);
							break;
						}
						throw new Exception();
					}
				}else{
					switch (i) {
					case 0:
						String code_error = "商品コードを入力してください";
						request.setAttribute("code_error", code_error);
						break;
					case 1:
						String name_error = "商品名を入力してください";
						request.setAttribute("name_error", name_error);
						break;
					case 2:
						String price_error = "単価を入力してください";
						request.setAttribute("price_error", price_error);
						break;
					}
					throw new NullPointerException();
				}
			}catch (NullPointerException e) {
			}catch (Exception e) {
			}
		}
		RequestDispatcher dispatch = request.getRequestDispatcher(URL);
		dispatch.forward(request, response);
	}

上記のコードからどうにかして実現させたいです。
宜しくお願い致します。

0

2Answer

					//全角カタカナチェック
					if (str[i].matches("^[ァ-ヶー]*$")) {

この部分が*じゃなくて+が正しいかと思います

1Like

Comments

  1. @RikuMoto

    Questioner

    回答ありがとうございます!

    こちら+でも*でも両方とも同じ結果になりました。
  2. 失礼しました。質問を読み違えてました。
    全角カタカナチェック == True で処理を終えたいのであれば、該当箇所は
    continue ではないでしょうか?

    if (str[i].matches("^[ァ-ヶー]*$")) {
    continue;

全角カタカナでチェックしそこでtrueなら処理を終わらせたい

これをやるとtrueでもfalseでもそこで終了してしまうので、半角英数字のチェックに進むケースがなくなります。

全角カタカナでチェックがture => 処理が終わる
全角カタカナでチェックがfalse => エラーメッセージがセットされて、処理が終わる

continueを使えば残りの処理をスキップして次のループに進むことができるのですが、この状態でやっても上記の理由でエラーになります。

//全角カタカナチェック
if (str[i].matches("^[ァ-ヶー]*$")) {
    continue;
}

// error: unreachable statement
// if (str[i].matches("^[A-Za-z0-9]+$")) {
// ^

まずは日本語や図で整理されることをお勧めします。

1Like

Your answer might help someone💌