正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。
[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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
eclipseでのsvn認証エラー回避方法
-
java クラスContext シンボルを...
-
拡張子 class ファイルを開きた...
-
構文エラーのやり直しについて
-
致命的: StandardServer.await:...
-
Buttonを配列とすることができ...
-
Javaについて
-
タグが閉じてないというエラー...
-
eclipseのエラーについて質問で...
-
「型 ArrayList は総称ではあり...
-
tomcat起動時エラー
-
getParameterについて
-
シンボルが見つかりませんとい...
-
コンパイル時にエラーが出てし...
-
executeBatch() のあとrollback...
-
機種依存文字のチェックについて
-
Eclipseで次のエラー箇所にジャ...
-
JSP NullPointerException
-
javaのエラーに関する質問 よ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
エラー:org.springframeworkが...
-
Javaのエラーについてです
-
eclipseでのsvn認証エラー回避方法
-
tomcat起動時エラー
-
eclipseをバージョンアップした...
-
シンボルが見つかりませんとい...
-
コンパイル時にエラーが出てし...
-
タグが閉じてないというエラー...
-
Buttonを配列とすることができ...
-
構文エラーのやり直しについて
-
Eclipse デバッグ エラー処理
-
Eclipseで次のエラー箇所にジャ...
-
JSP NullPointerException
-
javamailにて連続送信の際のエラー
-
S2daoのSqlファイルでのDBア...
-
DataSetのFilter
-
Eclipseの環境について
-
JSP内でString型からint型に変...
-
getParameterについて
おすすめ情報