- PR -

正規表現

1
投稿者投稿内容
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-04-07 14:57
こんにちは。
実は、現在Java.util.regexを使用して正規表現チェックを行っています。
ちなみにチェックされる文字はアプレットの「名前」という入力テキストより
渡された文字列が禁則文字を含んでいないかチェックしています。
ちなみに下記が自分で作ってみた禁則文字パターン?なんですが、"[","]","\"を
入力するとシステムが落ちてしまいました。
いろいろ調べてみたのですが、正規表現は初めてで想像していたより難しかった為
こちらでアドバイスを求めることに致しました。
自分が記述した方法以外にも良い方法がありましたら教えて頂けませんでしょうか。
よろしくお願いします。

Pattern pattern = Pattern.compile("[^@$%#!+=-/|(){}<>\\[\\]~^;:,.'\"]+");
Matcher matcher = pattern.matcher(nameTextField.getText());
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-04-07 15:06
すみません。
¥マークが\\に変わってしまっています。
下記が書き直した物になります。
Pattern pattern = Pattern.compile("[^@$%#!+=-/|(){}<>¥[¥]~^;:,.'¥"]+");
Matcher matcher = pattern.matcher(_nameField.getText());
かしん
常連さん
会議室デビュー日: 2004/08/27
投稿数: 25
お住まい・勤務地: 窓際
投稿日時: 2006-04-07 15:31
"-"(ハイフン)は文字クラスで範囲をあらわす正規表現に使われる記号であるため、"\\-"にする必要があるのでは。
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-04-07 15:42
かしんさん、お返事ありがとうございます。
実は、自分も同じようなことを考え、すべての対象文字に
¥をつけてやってみたところシステムが落ちることが
なくなりました。
ただ、どうしても記述が長くなるので良い方法がありましたら
教えてください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-07 16:02
正規表現で特定の文字をエスケープするには円マークが必要ですが、それ以前に Java のリテラルとして円マークを認識させるためには2重に記載する必要があるからではないでしょうか。
かしん
常連さん
会議室デビュー日: 2004/08/27
投稿数: 25
お住まい・勤務地: 窓際
投稿日時: 2006-04-07 16:14
全ての対象文字列に\をつけるとはどういうことでしょうか。
余計なお世話かもしれませんが、なにやら間違った方向へ進んでいる気がします。
システムは落ちなくなったかもしれませんが、ちゃんと要求は満たされていますか。

ちなみに、"&"や"\"は意図してチェックを通すのでしょうか。
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-04-07 17:35
インギさん、かしんさん返事ありがとうございます。
>全ての対象文字列に\をつけるとはどういうことでしょうか。
自分の中で、どの特殊記号に¥記号をつけてエスケープしてやれば
良いのか分からなかった為にすべてに¥をつければいいという
安易な考えを持っておりました。
”&”や”¥”だからということではなく、単純に特殊文字はすべて
チェックを通した方が良いのかと思っていました。
未記入X
大ベテラン
会議室デビュー日: 2005/05/19
投稿数: 136
投稿日時: 2006-04-07 17:48
こんばんは
引用:

まつじんさんの書き込み (2006-04-07 17:35) より:
”&”や”¥”だからということではなく、単純に特殊文字はすべて
チェックを通した方が良いのかと思っていました。


正規表現のパターン文字列は、ひとつひとつに明確に意味があります。
それ理解しないまま安易な変更を重ねても、おそらく正解には近付けませんよ。
まずは、記述が多少長くなっても、あなたが考えた通りに正確にマッチング処理を行える
そんなパターンを見つけましょう
1

スキルアップ/キャリアアップ(JOB@IT)