1

パスワードテキストボックスを検証しようとする次のロジックを持つ既存のアプリをローカライズしようとしています。これは、ユーザーがテキストボックスに入力できる特殊文字を含む言語では機能しないと思います。私は正しいですか?ユーザーが英語以外の文字(アラビア語、中国語など)を入力することを制限したいとは思いません。または、私が理解していないことがありますか?

Regex ValidHex =
   new Regex("[A-Za-z1234567890_-]+", RegexOptions.IgnoreCase);
if (!ValidHex.IsMatch(e.Text))
{
   e.Handled = true;
}
4

4 に答える 4

8

このようにして、Unicode文字をサポートできます。

[\p{L}\p{N}_-]+

補足として:許可される文字を制限する必要がある特定の理由はありますか?

于 2009-09-25T20:52:19.310 に答える
7

パスワードを保存しないでください!

暗号化ハッシュ関数を使用してパスワードをハッシュし、それを比較します。

于 2009-09-25T20:49:46.303 に答える
1

この正規表現は特に優れたものではなく、ユーザーのオプションを制限し、何も強制しません (パスワード 'a' と 'aaaaaaa' はパスします)。名前は、16 進数を検証する式から採用されたことを示唆しています。少なくとも長さの最小条件を追加する必要があります (正規表現または e.Text.Length > 8 として)。

より賢明な式は、いくつかのグループから少なくとも 1 つの文字が使用されたことを検証し @"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)" ます。ここでも、最小長チェックを追加します。

この例は、ローカライズの問題には対応していません。非ラテン文字は「.」を介してのみ許可されます。[az] または [AZ] の要件を満たしているとは見なされません。

于 2009-09-25T21:32:30.593 に答える
0

A-za-zの代わりに\wを使用してみましたか?ローカリゼーションの問題を回避できると確信しています。

于 2009-09-25T20:52:07.937 に答える