Regex MVC正则表达式模型验证
我想在我的密码中至少有3个数字。 此验证始终失败: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; } 我还尝试了在表达式
[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个或多个([^0-9]*[0-9]){3}
(或[^0-9]*
)数字以外的0个或更多字符\D*
(或[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}.*$