【问题标题】:ASP.NET MVC 5 RegularExpression Attribute Failing For Password ValidationASP.NET MVC 5 正则表达式属性无法验证密码
【发布时间】:2018-07-25 05:53:31
【问题描述】:

这是我的正则表达式:

[RegularExpression(@"^((?=.{12,}$)(?=[^\d]*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^\W]*\W))", ErrorMessage = "Passwords must be at least 12 characters long and contain at least an upper case letter, lower case letter, digit and a symbol")]

标准:

12 个字符,至少包含一个小写字母、大写字母和特殊字符。

字符串在以下情况下被拒绝:

任何少于 12 个字符的字符串,

啊啊啊啊啊啊,

aaaaaaaaaaaa1

字符串在以下情况下被接受(应该被拒绝):

啊啊啊啊啊啊啊,

aaaaaaaaaaaa#

编辑:这是我的模型中密码获取器和设置器的代码。

[Required]   
[RegularExpression("^(?=.{12,}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@!%*?&,#]).+$", ErrorMessage = "Passwords must be at least 12 characters long and contain at least an upper case letter, lower case letter, digit and a symbol")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

【问题讨论】:

  • 您的密码是否包含数字,因为错误消息中也包含数字"Passwords must be at least 12 characters long and contain at least an upper case letter, lower case letter, digit and a symbol"
  • @SwapNeil 哦,是的,我以为我最初是这样做的?
  • 您的测试用例到底是什么?以上不符合您的标准。如果符合条件,您需要^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^_\W]*[_\W]).{12,}$ - 请参阅regex101.com/r/aM2bgd/1
  • @WiktorStribiżew 这些是我尝试过的字符串。需要明确的是,它们都应该失败,为了清楚起见,我将更新问题。
  • @WiktorStribiżew 我在我的 MVC 应用程序上尝试了你的测试用例,并且在不应该接受的情况下接受了相同的测试用例。我的应用程序中一定存在根本性错误,这可能会导致这种情况,因为两个正则表达式都应该工作。

标签: c# regex asp.net-mvc


【解决方案1】:

试试这个:

您的标准:

12 个字符,至少包含一个小写字母、大写字母和特殊字符。

注意:我也添加了一个数字,因为您的验证消息包含数字。

[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{12,}", ErrorMessage = "Passwords must be at least 12 characters long and contain at least an upper case letter, lower case letter, digit and a symbol")]

【讨论】:

  • 我试过了,它通过并失败了原始测试用例。
  • 我尝试了给定的测试用例,但没有通过aaaaaaaaaaaa, aaaaaaaaaaaa1 aaaaaaaaaaaaA, aaaaaaaaaaaa#
  • 这很奇怪,我已经尝试过你的和 WiktorStribiżew 的正则表达式,但它仍然接受最后两个测试用例。非常不确定为什么。
【解决方案2】:

[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{12,}", ErrorMessage = "Passwords must be at least 12 characters long and contain at least an upper case letter, lower case letter, digit and a symbol")]

@SwapNeil 给出的答案是正确的。

你可以在这里试试:https://regex101.com/

如果它仍然无法正常工作。请检查 ~/bundles/jqueryval 是否包含在视图中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2016-10-19
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多