我想在密码中至少包含3个号码。 此验证始终失败:
[RegularExpression(@"[\d]{3}", ErrorMessage ="Password must have at least 3 digits")]
[Display(Name = "NewPassword", ResourceType = typeof(ModelResources))]
public string NewPassword { get; set; }
我也在表达式中尝试过()。我做错了什么?
答案 0 :(得分:1)
要求至少三位数,您可以使用
"^([^0-9]*[0-9]){3}.*$"
或
@"^(?:\D*\d){3}.*$"
或效率最低的正则表达式:
^(.*\d){3}.*$
请参阅regex demo
请注意,在.NET \d
匹配的不只是[0-9]
个数字,它可以匹配阿拉伯语和其他数字。 [^0-9]
和\D
匹配除数字之外的任何字符。
^
- 字符串开头([^0-9]*[0-9]){3}
- 恰好3次出现0个或更多个序列
[^0-9]*
(或\D*
)0位以外的其他字符[0-9]
(或\d
) - 数字.*
- 除换行符以外的0个或多个字符$
- 字符串结尾请注意,在principle of contrast之后使用相反的字符类来匹配3位数,这与点匹配相比非常有效,因为它涉及的回溯要少得多。您可以在regex101.com上的 regex调试器部分自行查看:my regex完成匹配需要2个回溯步骤,完成匹配需要^(.*\d){3}.*$
~180步相同的字符串。