1

Webサービスコンストラクターには次のパターンがあります。

rUsername = Pattern.compile("[A-z0-9]{4,30}");
rPassword = Pattern.compile("[A-z0-9!@#$%&*()=+-\\\\s]{6,30}");
rQuestion = Pattern.compile("[A-z0-9\\\\s?]{5,140}");
rAnswer = Pattern.compile("[A-z0-9\\\\s]{1,30}");

Webアプリケーションをデプロイするときにスラッシュが4つではなく2つしかない場合、Tomcatから解析例外が発生します。

ユーザー名1は問題なく機能しますが、パスワード、質問と回答に問題があるようです。パスワードは「testasdas」と一致しますが、「test1234」とは一致しません。質問はスペースを含むものとは一致せず、回答は何とも一致しないようです。

パスワードは、小文字と大文字、数字、スペース、およびそこに挿入した記号と一致できるようにする必要があります。質問の1つは、小文字と大文字、数字、スペース、および「?」に一致する必要があり、答えは、大文字と小文字、スペース、および数字だけに一致する必要があります。

編集:パターンは次のように変更されました:

rPassword = Pattern.compile("[A-Za-z0-9!@#$%&*()=+\\s-]{6,30}");
rQuestion = Pattern.compile("[A-Za-z0-9\\s?]{5,140}");
rAnswer = Pattern.compile("[A-z0-9\\s]{1,30}");

これらは多かれ少なかれ私が望む方法ですが、回答で指摘されているように、私はパスワードフィールドをかなり制限しています。これはおそらく良い考えではありません。これは誰も使用しない大学のプロジェクトであり、現実の世界では悪い考えですが、プロジェクトの要件の一部ではなかったため、保存する前に何もハッシュしません。ただし、SQLインジェクション攻撃を停止する必要があるため、すべてが非常に制限されています。私が知っているすべてのSQL攻撃が機能する必要がある使用を主に禁止するという考えでしたが'、その文字だけを禁止する方法はわかりません。

4

2 に答える 2

3

2番目の正規表現を見てみましょう。

[A-z0-9!@#$%&*()=+-\\\\s]

ここにはいくつかのエラーがあります。

  • [A-z]は正しくありません。必要なのは、[A-Za-z]間にいくつかのASCII文字がZありa、おそらく一致させたくないためです。しかし、それはあなたのエラーの問題ではありません。

さらに問題なのは、このセクションです。

+-\\\\s

Java文字列から実際の正規表現に変換すると、これは次のようになります。

+-\\s

+これは、(文字クラス内で)「との間の任意の文字\、または任意の空白を一致させる」ことを意味します。[+-\\]は有効な範囲(ASCII 43-92)ですが、必要な範囲ではありません。

ただし、2つの余分な円記号を削除すると、文字クラスは次のようになります。

+-\s

と「任意の空白」の間にASCII範囲がないため、これは構文エラーです。+

解決策:使用する

[A-Za-z0-9!@#$%&*()=+\\s-]

または、ユーザーが最初にパスワードで選択できる文字に制限を課すことは控えてください。

于 2012-09-25T09:11:51.380 に答える
0

大文字と小文字を一致させるには、パターンを指定する必要があります。-[a-zA-Z]

パターンを次のように変更してみてください:- [a-zA-Z0-9\\s]{1,30}答えは。

あなたの質問のために、それは空白を取りません、あなたは使うことができます- 私はそれがうまくいくと思う\\S非空白文字 ..あなたは残りの2に対応する変更を加えることができます。[a-zA-Z0-9\\S]{1,250}

*編集:-\\p{Z}任意の空白文字に一致させるために使用することもできます。

Java正規表現の使用に関する優れたチュートリアルについては、このリンクを参照してください。

于 2012-09-25T09:11:00.677 に答える