Regex MVC正则表达式模型验证

Regex MVC正则表达式模型验证,regex,asp.net-mvc,validation,model-view-controller,model,Regex,Asp.net Mvc,Validation,Model View Controller,Model,我想在我的密码中至少有3个数字。 此验证始终失败: [RegularExpression(@"[\d]{3}", ErrorMessage ="Password must have at least 3 digits")] [Display(Name = "NewPassword", ResourceType = typeof(ModelResources))] public string NewPassword { get; set; } 我还尝试了在表达式

我想在我的密码中至少有3个数字。 此验证始终失败:

 [RegularExpression(@"[\d]{3}", ErrorMessage ="Password must have at least 3 digits")]
        [Display(Name = "NewPassword", ResourceType = typeof(ModelResources))]
        public string NewPassword { get; set; }

我还尝试了在表达式中使用()。我做错了什么?

要要求至少三位数字,您可以使用

"^([^0-9]*[0-9]){3}.*$" 

或者效率最低的正则表达式:

^(.*\d){3}.*$

请注意,在.NET
\d
中,它不仅匹配
[0-9]
数字,还可以匹配阿拉伯语和其他数字。
[^0-9]
\D
匹配除数字以外的任何字符

  • ^
    -字符串的开头
  • ([^0-9]*[0-9]){3}
    -0个或多个
    • [^0-9]*
      (或
      \D*
      )数字以外的0个或更多字符
    • [0-9]
      (或
      \d
      )-一个数字
  • *
    -换行以外的0个或更多字符
  • $
    -字符串结尾

请注意,使用相反的字符类来匹配3位数字遵循的是,这与点匹配相比非常有效,因为它涉及的回溯要少得多。您可以在regex debugger部分的regex101.com上查看自己:完成匹配需要2个回溯步骤,在同一字符串中完成匹配需要大约180个步骤。

类似于
\d.*\d.*\d
的内容。仍然失败。。。谢谢你的回答。:)请尝试
^.*.\d.*.\d.*.$
尝试
“^([^0-9]*[0-9]){3}.*.$”
-这至少需要三个digits@stribizhev-为什么不使用digit类
\d
?此正则表达式正好匹配3位数字,而不是“至少3位”。它强制匹配3位数字,然后匹配任何(
)中的任何数字(
*
)人物。3位匹配部分(
(?:\D*\D){3}
)基于,并且比
(.*\D){3}
更有效,因为它涉及较少的回溯。如果你不能用确凿的事实来支持你的否决票,为什么要失去声望点呢?我同意你的观点,你的长正则表达式应该用在执行代码的性能是最高优先级的地方。说到正则表达式,我倾向于支持人的可读性而不是性能,尽管还有其他所有因素。@AlanMcBee:当你处理正则表达式时,应该始终考虑性能。:“对于那些没有严格内存或CPU周期限制的人来说,过早优化是一种反模式,…”
^(.*\d){3}.*$