MVC验证仅在字符串字段上使RegularExpression成为数字

时间:2015-05-29 14:26:58

标签: c# asp.net-mvc

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

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

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

有了上述内容,我收到错误" UPRN必须是数字"无论是字符串还是int

这里发生了什么?

4 个答案:

答案 0 :(得分:36)

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

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

不要忘记包括:

@Scripts.Render("~/bundles/jqueryval")
在您的jquery验证视图中

答案 1 :(得分:6)

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

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

这是正则表达式可视化:

Regular expression visualization

Debuggex Demo

答案 2 :(得分:3)

RegEx应为^[0-9]*$

即。

该属性应如下所示:

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

见工作example

我确定你已经引用了jQuery,但确保jQuery验证并包含Microsoft验证脚本。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>

<script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script>

答案 3 :(得分:2)

我建议你使用:

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

*请注意,如果您删除[必填]和[MinLength(1)]

,它将接受为空

或使用以下内容:

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

只接受一个数字

您可以在此处测试正则表达式:https://regex101.com/