dポイントプレゼントキャンペーン実施中!

システムの入力チェックのために
!"#$%&'()=~|`{+*}<>?_-^\@[;:],./
!”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・

などの半角記号、全角記号を1個以上含むとtrueを返す
正規表現を作りたいのですが、うまくできなくて困っています。
以下の[ ]に入れる値で、何か良いものはありませんか?


Boolean b = Pattern.compile("[ ]+").matcher(input).matches();

A 回答 (3件)

>全角はエスケープシーケンスがいらないのでしょうか?


いらないです。エスケープする必要がないので。

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

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

お礼日時:2009/07/13 23:21

「\(半角円マーク)」は


 正規表現では「\\(半角円マーク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」ですよね?

この回答への補足

Punctの使い方を間違っていたようで、うまくできましたが、

全角記号が難しいです。
全角はエスケープシーケンスがいらないのでしょうか?

Punctのように何か省略して行う方法があればいいのですが。

補足日時:2009/07/07 16:00
    • good
    • 1

「うまくできない」とはどのような状態を指すのでしょうか?


表記に工夫の必要な記号がありますが, そこはちゃんとよろしくしていますか?

この回答への補足

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

補足日時:2009/07/07 15:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A