需要基于模型的验证MVC

时间:2016-08-10 07:48:37

标签: asp.net regex asp.net-mvc

我正在使用MVC.net 4来构建Web应用程序。 我需要使用正则表达式来满足以下条件:

  1. 长度必须介于6-32个字符之间。
  2. 必须至少包含一个小写字母。
  3. 必须至少包含一个大写字母。
  4. 必须至少包含一个数字或特殊字符。
  5. 小心第4点,我只需要在数字和特殊字符之间表达或条件(不包括数字和特殊字符的情况)。

    我正在使用以下代码正常工作,但需要使用数字和符号之间的情况。

    [Required(ErrorMessage = "New Password is Required")]
    [StringLength(32, MinimumLength = 6, ErrorMessage = "New Password should not be lessthan 6 character.")]
    [RegularExpression(@"(?=.*[a-zA-Z0-9])(?=.*[~!@#$%^&*])[a-zA-Z0-9~!@#$%^&*]{8,15}", ErrorMessage = "Password should contain atleast one upper and lower character and on digit or special character.")]
    public string NewPassword { get; set; }
    

    即。我只需要密码表达式就像设置amanDeep1然后不需要检查符号或设置为@amanDeep然后不需要检查数值。

1 个答案:

答案 0 :(得分:1)

您将数字作为字符类的一部分放在第一个前瞻中,整个正则表达式实际上并不是您需要的。

0-9置于特殊字符前瞻要求中,并将第一个前瞻分割为需要至少1个较低且至少1个大写字母:

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9~!@#$%^&*])[a-zA-Z0-9~!@#$%^&*]+
^^^^^^^^^^^^^^^^^^^^^^      ^^^                               ^          

请注意,您最后可以使用+,因为长度受[StringLength(32, MinimumLength = 6, ErrorMessage = "New Password should not be lessthan 6 character.")]限制。

模式详情

  • 由于RegularExpressionAttribute内的模式默认锚定
  • ,因此未使用任何锚点
  • (?=.*[a-z]) - 需要1个小写ASCII字母
  • (?=.*[A-Z]) - 需要1个大写ASCII字母
  • (?=.*[0-9~!@#$%^&*]) - 需要来自该集合的1位数或特殊字符(注意 OR 关系默认位于正字符类中的字符/范围之间)
  • [a-zA-Z0-9~!@#$%^&*]+ - 来自
  • 的一个或多个字符