• ベストアンサー

半角記号、全角記号を含む正規表現を作れなくて困っています。

システムの入力チェックのために !"#$%&'()=~|`{+*}<>?_-^\@[;:],./ !”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・ などの半角記号、全角記号を1個以上含むとtrueを返す 正規表現を作りたいのですが、うまくできなくて困っています。 以下の[ ]に入れる値で、何か良いものはありませんか? Boolean b = Pattern.compile("[ ]+").matcher(input).matches();

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>全角はエスケープシーケンスがいらないのでしょうか? いらないです。エスケープする必要がないので。 >エスケープシーケンスをあまり使いたくないので、範囲指定する方法を知りたいのです。 うーん。全角の記号はエスケープする必要がないけど、「範囲指定」だとUnicodeで範囲指定できるかも。 ただ、全角の記号がUnicodeで連続になっていればいいけど、(おそらく)なっていないだろうから。 正規表現の読みやすさ?を考えてのことだったら… 苦しいかもしれないけど  String hankaku = "\\p{Punct}"; //半角記号  String zenkaku = "!”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・"; //全角記号  boolean b = Pattern.compile("["+hankaku+zenkaku+"]+").matcher(input).matches(); ってな感じでどうでしょう…。

pochi1234
質問者

お礼

全角記号は全部書かないとだめなんですね。 とても参考になりました。ありがとう。

その他の回答 (2)

回答No.2

「\(半角円マーク)」は  正規表現では「\\(半角円マーク2つ)」としなければなりません。 Javaでは文字列に「\(半角円マーク)」を記述するときは  「\\(半角円マーク2つ)」としなければなりません。 ということは、Javaの文字列に正規表現で「\(半角円マーク)」を使う場合は  「\\\\(半角円マーク4つ)」ということになります。 半角記号が  !"#$%&'()=~|`{+*}<>?_-^\@[;:],./ これらだけで他にはないのであれば、この部分は  \p{Punct} に置き換え可能です。 例)  String hoge = "\\";  System.out.println(hoge.matches("[\\p{Punct}]+")); >Boolean b = Pattern.compile("[ ]+").matcher(input).matches(); 「Boolean」じゃなくて「boolean」ですよね?

pochi1234
質問者

補足

Punctの使い方を間違っていたようで、うまくできましたが、 全角記号が難しいです。 全角はエスケープシーケンスがいらないのでしょうか? Punctのように何か省略して行う方法があればいいのですが。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「うまくできない」とはどのような状態を指すのでしょうか? 表記に工夫の必要な記号がありますが, そこはちゃんとよろしくしていますか?

pochi1234
質問者

補足

エスケープシーケンスをあまり使いたくないので、範囲指定する方法を知りたいのです。

関連するQ&A