2015-05-29 79 views
12

我在我的视图模型以下属性:无论Uprn是一个stringMVC验证使正则表达式的数字只对字符串字段

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

,我想抛出一个验证错误,如果有数字之外的其他任何在提交页面时进入Uprn框。

通过上述,我收到错误“UPRN必须是数字”是否它是一个字符串或INT

这是怎么回事?

+0

是你的属性的一个数组吗?这只是你的代码片段中的一个字符串? –

+0

对不起,我只是意味着一个数组,如1234或你好 – JsonStatham

+0

为了澄清为什么正则表达式是错误的,'''里面'[]''意思是*不* *所以你说:允许任何东西*除数字*。 –

回答

24

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

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

不要忘记包括:

@Scripts.Render("~/bundles/jqueryval") 
在你看来

为jQuery验证

3

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

I.E.

的属性应该是这样的:

[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

或者你可以做的长度确认在正则表达式:

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

下面是可视化的正则表达式:

Regular expression visualization

Debuggex Demo

+1

这样你只会有一个错误消息,分离出来,你可以指定不同的错误消息,每个条件:) –

1

我建议您使用:

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

*注意,如果你删除[必需]它将接受空[MINLENGTH个(1)]

或使用以下命令:

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

将只接受一个多个数字

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

相关问题