【问题标题】:Need to a custom Regular expression for model based validation MVC需要为基于模型的验证 MVC 自定义正则表达式
【发布时间】:2016-08-10 07:48:37
【问题描述】:

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

  1. 长度必须在 6-32 个字符之间。
  2. 必须至少包含一个小写字母。
  3. 必须至少包含一个大写字母。
  4. 必须至少包含一个数字或特殊字符。

注意第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; }

即我只需要将 Expression 设置为设置 amanDeep1 的密码,则无需检查符号,或者如果设置为 @amanDeep,则无需检查数值。

【问题讨论】:

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


    【解决方案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~!@#$%^&*]+ - 集合中的 1 个或多个字符

    【讨论】:

    • Stribizew 感谢您的回复。此表达式仅使用 2 种情况,例如如果我输入 aA,则不需要符号或数字。但我必须使用 Aa1 或 Aa@ 这种表达方式。
    • 像 amanDeep1 或 AMandeep@ 任何数量的符号和超过六个但至少 1 个大写必须、一个小写必须、一个数字或符号是可选的。表示密码必须包含一个符号或数字。但如果输入数字,则无需检查符号,反之亦然。
    • 这里是这个正则表达式如何工作的演示:regex101.com/r/nU5mJ6/1。它匹配您提供的两个值。
    • 谢谢@Stribizew。但在 amanDeee Amandeep 且不需要符号或数字的情况下,它也可以正常工作。它必须需要一个数字或符号。链接是regex101.com/r/nU5mJ6/3 在这种情况下它应该匹配。
    • 是的,它可以按照我的要求正常工作。非常感谢@Wiktor Stribizew....非常感谢。
    猜你喜欢
    • 2011-12-02
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多