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

Jso*_*ham 26 c# asp.net-mvc

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

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

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

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

这里发生了什么?

Jim*_*988 42

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

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

别忘了包括:

@Scripts.Render("~/bundles/jqueryval")
Run Code Online (Sandbox Code Playgroud)

在您的jquery验证视图中


cod*_*ape 8

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

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

这是正则表达式可视化:

正则表达式可视化

Debuggex演示


Ash*_*way 5

正则表达式应该是^[0-9]*$.

IE

该属性应如下所示:

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

请参阅工作示例


我确定您已经引用了 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>
Run Code Online (Sandbox Code Playgroud)