MVCvalidation仅在字符串字段上使RegularExpression成为数字

我在视图模型中有以下属性:

[Required] [MaxLength(12)] [MinLength(1)] [RegularExpression("[^0-9]", ErrorMessage = "UPRN must be numeric")] public string Uprn { get; set; } 

无论Uprn是一个string ,如果在页面提交的Uprn框中输入了除数字以外的任何内容,我想抛出validation错误。

有了上面的内容,我得到错误“UPRN必须是数字”,无论是字符串还是int

这里发生了什么?

正则表达式是错误的。 替换为:

 [Required] [MaxLength(12)] [MinLength(1)] [RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")] public string Uprn { get; set; } 

别忘了包括:

 @Scripts.Render("~/bundles/jqueryval") 

在您的jqueryvalidation视图中

或者你可以在regexp中进行长度validation:

 [Required] [RegularExpression("^[0-9]{1,12}$", ErrorMessage = "...")] public string Uprn { get; set; } 

这是正则表达式可视化:

正则表达式可视化

Debuggex演示

RegEx应为^[0-9]*$

IE

该属性应如下所示:

 [Required] [MaxLength(12)] [MinLength(1)] [RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")] public string Uprn { get; set; } 

见工作示例 。


我确定你已经引用了jQuery,但确保jQueryvalidation并包含Microsoftvalidation脚本。

    

我建议你使用:

 [RegularExpression("\d*", ErrorMessage = "UPRN must be numeric")] 

*请注意,如果删除[必需]和[MinLength(1)],它将接受为空

或使用以下内容:

 [RegularExpression("\d+", ErrorMessage = "UPRN must be numeric")] 

只接受一个数字

你可以在这里测试你的正则表达式: https : //regex101.com/