
正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。
[0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。
「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」
ロジックは以下のように記述しています。
Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]");
Matcher m = p.matcher("文字列");
if(m.matches() == true){
System.out.println("1");
}
else{
System.out.println("2");
}
※「\」と「"」はエスケープしています。
下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・
Illegal character range near index 32
[0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]
^
申し訳ありませんがアドバイスいただけませんでしょうか?
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
問題のキャラクターをエスケープしたら、
>「エスケープ・シーケンスが無効です」
とメッセージが出たということですね。
これは、Perl などの言語と違って、Javaでは正規表現を一旦文字列として
記述して、それをライブラリの入力として与えなければならないことに
原因があります。
つまり、正規表現で使うエスケープ用の記号も '\' で、同時に文字列で
エスケープに使う記号も'\' なので、正規表現として '\' を表すには
文字列では '\\' と記述しないといけないということです。
具体例を挙げると、
_\-^
という正規表現を渡すためには、
"_\\-^"
という文字列を記述しないといけません。そうしないと、Javaの文字列
のエスケープとして解釈されてしまうので
>「エスケープ・シーケンスが無効です」
となってしまうわけです。
だから、「正規表現で\」を記述するには
"\\\\" → 「文字列のエスケープを処理」→ \\ → 「正規表現のエスケープを処理」
→ \
と、"\\\\" とする必要があったりします。
この回答への補足
回答ありがとうございます。
なるほど、ちょっと試してみます。
進展がありましたら投稿しますのでお待ち下さい。
宜しくお願いします。
No.4
- 回答日時:
> 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」
いきなりこれだけの記号を試すのではなく、1つずつ試していってはいかがですか?
> それ以外にエスケープしようとすると「エスケープ・シーケンスが無効です」とエラーになります。
と仰るのが具体的にどの文字なのか分かりませんが、1つずつ試せば分かるはずなので、その文字をエスケープする方法、という形に絞って検索するなり、質問するなりできると思います。
この回答への補足
回答ありがとうございます。
1つ1つ記述して試してみます。
進展がありましたら投稿しますのでお待ち下さい。
宜しくお願いします。
No.3
- 回答日時:
/*
久々にsakusaker7さん見かけたなーと。
このコードどう思う?
*/
class x{
public static void main(String[] args){
/*java.util.regex.Pattern p = java.util.regex.Pattern.compile("^[\\p{ASCII}&&[\\P{C}]]$"); */
java.util.regex.Pattern p = java.util.regex.Pattern.compile("^[\\p{ASCII}&&[^\\p{C}]]$");
for(int i = 0;i < 128 ; i++){
if(p.matcher(java.lang.Character.toString(java.lang.Character.toChars(i)[0])).matches()){
System.out.println(Integer.toString(i) + ":" + "YES");
}else{
System.out.println(Integer.toString(i) + ":" + "No");
}
}
}
}
この回答への補足
回答ありがとうございます。
ロジックを記述していただきありがとうございます。
しかし、私には難しいです。
すみませんが正規表現ではできないのでしょうか。
再度、宜しくお願いします。
No.2
- 回答日時:
ブラケットの中の記号に
_-^
と並んでいる部分がありますよね。
ここが、_、-、^という三つのキャラクターではなく
_から^までの範囲の指定と解釈され、かつ、_は^よりも
「順番があとのキャラクター」なので
Illegal character range
となってます。
-はブラケットの中で特別の意味を持っていますから、それを打ち消すための
エスケープが必要です。
^も特別な意味がありますが、先頭になければそのままでも大丈夫でしょう。
あ、あと[と]も要エスケープですね。
この回答への補足
回答ありがとうございます。
Eclipseで作成しています。
「\」と「"」はエスケープしないとエラーになったのでエスケープしました。
またそれ以外にエスケープしようとすると「エスケープ・シーケンスが無効です」とエラーになります。
どのようにしたらいいのでしょうか。
アドバイス宜しくお願いします。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP preg_matchで Warning: Undefined variableが出ます 1 2022/11/15 17:06
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
タグが閉じてないというエラー...
-
エラー:org.springframeworkが...
-
「型 ArrayList は総称ではあり...
-
【ジェネリックス】コンパイル...
-
eclipseをバージョンアップした...
-
JSON形式でsocket通信するには
-
JSP NullPointerException
-
Buttonを配列とすることができ...
-
Antでのビルドにエラー
-
JSPのIF文を教えて下さい
-
Eclipseの環境について
-
Eclipse 1つのプロジェクトに複...
-
jspのファイルでエラーが出る
-
eclipseでのsvn認証エラー回避方法
-
JSPで意味不明のコンパイルエラー
-
アラートをプログラムで消す方法
-
Eclipseで次のエラー箇所にジャ...
-
JDBC:ODBCでaccess db にデータ...
-
正規表現で入力チェックするには。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
エラー:org.springframeworkが...
-
コンパイル時にエラーが出てし...
-
eclipseをバージョンアップした...
-
tomcat起動時エラー
-
構文エラーのやり直しについて
-
タグが閉じてないというエラー...
-
Eclipse デバッグ エラー処理
-
Javaのエラーについてです
-
eclipseでのsvn認証エラー回避方法
-
Eclipseの環境について
-
シンボルが見つかりませんとい...
-
java eclipse apache tomcat 9....
-
java エラー
-
【ジェネリックス】コンパイル...
-
eclipseのエラーについて質問で...
-
BufferdReaderが見つからない?
-
javamailにて連続送信の際のエラー
-
拡張子 class ファイルを開きた...
-
JSP NullPointerException
おすすめ情報