MVC正则表达式模型验证

时间:2015-11-24 18:27:57

标签: 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; }

我也在表达式中尝试过()。我做错了什么?

1 个答案:

答案 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步相同的字符串。