2

私のモデルでは、単純なパスワード検証のために正規表現を指定しました

[Required(ErrorMessage="Error")]
[RegularExpression("(?=.{6,})(?=.*\\d)|(?=.*\\W)", ErrorMessage= "Error")]
public string Password { get; set; }

予想どおり、これにより html 要素が生成されます

<input class="textbox-regular" data-val="true" data-val-regex="Error" data-val-regex-pattern="(?=.{6,})(?=.*\d)|(?=.*\W)" data-val-required="Error" id="Password" name="Password" type="password" />

これは有効な JavaScript 正規表現ですが、パスワードが一致しません。これは JQuery バリデーターの制限ですか?

どうも

4

3 に答える 3

1

あなたのステートメントは、3 つの肯定的な先読みアサーションで構成されています。肯定的な先読みアサーションは見つかったものを返さないため、何も返されない場合に真理値を生成することはできないと思います。このようなものはあなたが必要とするものを生み出しますか?

((?=.*\W)|(?=.*\d)).{6,}

またはあなたの文字列で:

"((?=.*\\W)|(?=.*\\d)).{6,}"

ここで私は、少なくとも 6 つの何かがあり、それらには単語以外の文字または数字のいずれかが含まれている必要があると主張しました。正の先読みアサーションに配置しなかったため、6 文字以上が返されます。内部の値がこれらのアサーションに一致する場合にのみ値が返されるため、ユーザー入力は適切に検査に合格する必要があります。

ここで試してみてください

有効な正規表現は、一致すると予想されるものと一致するという意味ではありません。正確には、あなたが一致させたいと思っているものは何ですか?

私の仮定では、少なくとも 1 つの数字または少なくとも 1 つの単語以外の文字と、最低 6 文字を一致させることを望んでいるということですか?

于 2012-04-24T18:04:47.983 に答える
1

私が望んでいたことを行う単一の正規表現がありますが、これを 3 つの検証に分割することで、より良いユーザー エクスペリエンスを実現できます。これにより、ユーザーは必要なものに関する特定のメッセージを受け取ることができます。例えば

[Required(ErrorMessage="Please enter a password")]
[StringLength(100, MinimumLength = 6, ErrorMessage = "Password must be at least 6 characters long")]
[RegularExpression("(.*\\d.*)|(.*[@#$%^&+=\\*].*)", ErrorMessage = "Password must contain a digit or special character")]
于 2012-04-25T20:43:19.720 に答える
1

ほとんどすべてに一致するはずなので、これは驚くべきことです。
バリデーターは、一致または失敗したときにエラー メッセージを表示することになっていますか?

おそらく、正規表現は文字列全体に一致するはずです。もしそうなら、あなたはこれを試すことができます

"^(?:(?=.{6,})(?=.*\\d)|(?=.*\\W)).*$" 

そして何が起こるか見てください。

^$空の文字列で試してから、長さのある文字列で試してください。

于 2012-04-24T18:08:14.370 に答える