2011-08-04 48 views
0

我的一個視圖模型有一個屬性,GramWeight,定義爲MVC3數據註釋正則表達式驗證屬性失敗

[Display(Name="Gram Weight")] 
    [RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Gram Weight must be a Number.")] 
    [Range(0, 9999.99, ErrorMessage = "Value must be between 0 - 9,999.99")] 
    public decimal? GramWeight { get; set; } 

當用戶輸入的值與一家領先的小數點就這一領域的驗證失敗,這樣的爲0.23而不是0.23。如果用戶將0添加到前面,則驗證通過。我曾以爲這是我的正則表達式的問題,但我在這個http://regexhero.net/tester/了一些測試,它似乎工作得很好。

所以,如果它不是正則表達式,它是別的東西?我即將準備好使用javascript爲用戶追加0,如果他們不這樣做。這是我最後的選擇,但我正在考慮它。

回答

2

是因爲它是一個小數類型,你有沒有試圖改變GramWeight將字符串正好看到驗證器在這種情況下怎麼辦?

+0

我給它一個鏡頭。 –

+0

好吧,看來當我將屬性類型更改爲字符串,然後它的工作。雖然這解釋了這個問題,但我不確定我喜歡將我的所有小數域作爲字符串表示的想法。我認爲偉大的觀點,但沒有其他地方。由於我的模型經常作爲域對象,這真的是打擊。儘管感謝解決方案。 –

+0

聽起來像是一些JavaScript可能會被要求以零前綴,如果它帶有小數點開始。你是否也使用客戶端驗證/輸入過濾? –

0

對於那些誰在這裏需要一個更好的解決方案是正確的正則表達式驗證十進制數:圓點符號前

[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]")] 

此正則表達式需要(在你的案件零)數量,並允許最多2位小數。

+0

我想要允許一個前導小數,而不是0.而在許多情況下,我需要一個以上的小數位。 .00125是一個常見值。 –