- - PR -
正規表現
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-07 14:57
こんにちは。
実は、現在Java.util.regexを使用して正規表現チェックを行っています。 ちなみにチェックされる文字はアプレットの「名前」という入力テキストより 渡された文字列が禁則文字を含んでいないかチェックしています。 ちなみに下記が自分で作ってみた禁則文字パターン?なんですが、"[","]","\"を 入力するとシステムが落ちてしまいました。 いろいろ調べてみたのですが、正規表現は初めてで想像していたより難しかった為 こちらでアドバイスを求めることに致しました。 自分が記述した方法以外にも良い方法がありましたら教えて頂けませんでしょうか。 よろしくお願いします。 Pattern pattern = Pattern.compile("[^@$%#!+=-/|(){}<>\\[\\]~^;:,.'\"]+"); Matcher matcher = pattern.matcher(nameTextField.getText()); | ||||
|
投稿日時: 2006-04-07 15:06
すみません。
¥マークが\\に変わってしまっています。 下記が書き直した物になります。 Pattern pattern = Pattern.compile("[^@$%#!+=-/|(){}<>¥[¥]~^;:,.'¥"]+"); Matcher matcher = pattern.matcher(_nameField.getText()); | ||||
|
投稿日時: 2006-04-07 15:31
"-"(ハイフン)は文字クラスで範囲をあらわす正規表現に使われる記号であるため、"\\-"にする必要があるのでは。
| ||||
|
投稿日時: 2006-04-07 15:42
かしんさん、お返事ありがとうございます。
実は、自分も同じようなことを考え、すべての対象文字に ¥をつけてやってみたところシステムが落ちることが なくなりました。 ただ、どうしても記述が長くなるので良い方法がありましたら 教えてください。 | ||||
|
投稿日時: 2006-04-07 16:02
正規表現で特定の文字をエスケープするには円マークが必要ですが、それ以前に Java のリテラルとして円マークを認識させるためには2重に記載する必要があるからではないでしょうか。
| ||||
|
投稿日時: 2006-04-07 16:14
全ての対象文字列に\をつけるとはどういうことでしょうか。
余計なお世話かもしれませんが、なにやら間違った方向へ進んでいる気がします。 システムは落ちなくなったかもしれませんが、ちゃんと要求は満たされていますか。 ちなみに、"&"や"\"は意図してチェックを通すのでしょうか。 | ||||
|
投稿日時: 2006-04-07 17:35
インギさん、かしんさん返事ありがとうございます。
>全ての対象文字列に\をつけるとはどういうことでしょうか。 自分の中で、どの特殊記号に¥記号をつけてエスケープしてやれば 良いのか分からなかった為にすべてに¥をつければいいという 安易な考えを持っておりました。 ”&”や”¥”だからということではなく、単純に特殊文字はすべて チェックを通した方が良いのかと思っていました。 | ||||
|
投稿日時: 2006-04-07 17:48
こんばんは
正規表現のパターン文字列は、ひとつひとつに明確に意味があります。 それ理解しないまま安易な変更を重ねても、おそらく正解には近付けませんよ。 まずは、記述が多少長くなっても、あなたが考えた通りに正確にマッチング処理を行える そんなパターンを見つけましょう |
1