2016-03-26 5 views
0

私はMVCアプリケーションを作成しており、強力なパスワードが必要です。簡単に、私は次のプロパティを持つビューモデルを設定しました。Jquery UnobstrustiveとMVC 5 - RegExがjquery unobstrustiveで満足することはありません

[Required] 
    [RegularExpression(@"(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,", ErrorMessage ="1 upper, 1 lower, 1 digit, 8 character minimum length")] 
    public string PasswordEntered { get; set } 

私は、サーバーの検証を使用するとき、これはうまく動作します:限り、私は上下、数値および8つの文字の合計を入力すると、私のモデルが有効です。

jqueryの邪魔にならない検証を有効にすると、私の他のフィールドはすべて往復なしで検証されますが、Password123のような有効なパスワードを入力しても忘れてはいけないエラーメッセージが表示されます。

なぜ正規表現は機能しませんか?これを修正するにはどうすればよいですか?

編集: さらなる研究。 jqueryのコードをデバッグおよびステッピングに私は私の正規表現は、任意のマッチグループを返さないため、この

return (match && (match.index === 0) && (match[0].length === value.length)); 

だから、jqueryのは、失敗したとして、正規表現を考慮してご覧ください。私はjqueryを満たすためにマッチグループを得る方法がわかりません...

+0

jqueryの検証の前に作業していたにもかかわらず、問題が私の正規表現にあると思います...これを今見てください。 –

+0

正規表現を簡略化し、https://regex101.com/を使用して正規表現「?=。* \ d」(?=。* [az])(?=。* [AZ])を検証しました。これは長さの要件を取り除くことに注意してください。まだjqueryを使用して検証していません。 –

+0

jqueryが結果を有効であると認識しないマッチグループを正規表現が与えないためです。上記の編集を参照してください。 –

答えて

1

RegExのクラッシュコースを2時間以上かけてjqueryコードを調べたところ、jqueryは入力と同じ長さのマッチグループが必要ですテストされています。私の元の正規表現にはマッチグループが含まれていなかったので、jquery関数は失敗しました。私は元の正規表現を変更し、今すぐ動作します。

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.{8,}$) 
+0

パスワードの妥協のない検証(たぶん)に悩まされている人は、これは長さ要件が必要な正規表現です。私は(テスターで)いくつかの他の有効な正規表現を試しましたが、これは実行時に実際に動作する唯一のものです – Dan

関連する問題