2015-05-29 78 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/

相關問題