匹配 'password' 和 'admin' 的 Jquery 验证不起作用

标签 jquery regex asp.net-mvc-5 jquery-validate unobtrusive-validation

我尝试编写密码的正则表达式:

public class ApplicationUser : IdentityUser, ITimeStamps
{
    public const string PasswordRegularExpression = @"admin|password";
    // public const string PasswordRegularExpression = @"/admin|password/i"; // Tried this too
    // public const string PasswordRegularExpression = @"/(admin|password)/i"; // Tried this too

这超出了正常的 Microsoft 标识内容:

manager.PasswordValidator = new PasswordValidator
{
     RequiredLength = 6,
     RequireNonLetterOrDigit = false,
     RequireDigit = true,
     RequireLowercase = false,
     RequireUppercase = false,
};

这是我的注册 View 模型:

public class RegisterViewModel
{
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    [RegularExpression( ApplicationUser.PasswordRegularExpression, ErrorMessage = "The {0} must contain atleast 1 number and must not contain the word 'admin' or 'password'" )] 
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

当有人在密码中使用密码或管理员时,我想在 jquery 验证中抛出错误。然而,jquery 验证似乎没有按预期工作。我可能会错过什么?

从 asp.net 生成的 html 如下所示:

<input class="form-control input-validation-error" data-val="true" data-val-length="The Password must be at least 6 characters long." data-val-length-max="100" data-val-length-min="6" data-val-regex="The Password must contain atleast 1 number and must not contain the word 'admin' or 'password'" data-val-regex-pattern="admin|password" data-val-required="The Password field is required." id="Password" name="Password" placeholder="Enter a password" type="password">

测试用例:

  • 我已经添加了括号,但它仍然无法按预期工作。我输入密码,实际上并没有失败!然后我再输入 1 个字符(不管它是什么),然后它失败了......现在我删除了单词“password”的一部分,例如“pasrd21234”,错误仍然存​​在!

旁注:

最佳答案

基于 Regular expression to match a line that doesn't contain a word? 的答案,以下正则表达式应匹配任何密码除了(如果它包含“admin”或“password”:

)
^((?!(admin|password)).)*$

我已经在Regex101上为此创建了一个 fiddle 。在将其添加到您的应用程序之前进行测试。

关于匹配 'password' 和 'admin' 的 Jquery 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30307246/

相关文章:

javascript - Selectize.js destroy() 方法更改选择值

regex - 如何使用 grep 和正则表达式查找目录中的所有文件?

python - 用户在 Django 表单中输入无效正则表达式导致 500 服务器错误

javascript - 通过正则表达式匹配到由 JavaScript 替换的字符串

c# - 如何将 WebApi 2 与 Spring.Net 集成

jquery - RoR中ajax页面请求期间触发JS加载消息的最简洁方法是什么

javascript - 如何为每个具有附加数字的 id 的元素使用 Javascript 函数

c# - 使用自定义表扩展 asp.net mvc 5 身份

javascript - 在javascript中打印/警告数组

javascript - 如何使用 JQuery 检查复选框是否被选中