2014-02-26 59 views
2

我使用MVC數據註釋爲我的模型上的字段指定驗證正則表達式。該字段是可選的,即,它不具有施加的[Required]屬性:不顯眼的驗證:可選字段的正則表達式驗證

[RegularExpression(@"^\d+$")] 
public int Quantity { get; set; } 

當客戶端驗證運行時,該字段不針對正則表達式驗證。

$jQval.addMethod("regex", function (value, element, params) { 
    var match; 
    if (this.optional(element)) { // <- returns if field is optional 
     return true; 
    } 

    match = new RegExp(params).exec(value); 
    return (match && (match.index === 0) && (match[0].length === value.length)); 
}); 

我怎樣才能添加驗證,使空場是允許的,但如果輸入一個值,它必須在正則表達式匹配:綜觀jquery.validate.unobtrusive.js代碼爲什麼會變得清楚了嗎?

關於編輯:很明顯,我可以更改jquery.validate.unobtrusive.js中的代碼,但我寧願保留此文件,以免我的更改被未來更新覆蓋。

+0

如果由於if(this.optional(element)){'condition –

+0

@ Arun P Johny:字段是空的,它應該允許:完全。我該如何改變這種情況(同時將代碼保留在jquery.validate.unobtrusive.js中)? – matk

+0

參見http://jsfiddle.net/arunpjohny/m8J8H/1/ –

回答

0

您的正則表達式不正確。 d+表示「匹配一個或多個十進制數字」。更改數據註釋本(注意的地方+,這意味着「零次或更多次的」 *):

[RegularExpression(@"^\d*$")] 
public int Quantity { get; set; } 

瞭解更多信息退房this Microsoft article

+0

這並沒有什麼區別,因爲驗證函數在它看到實際的正則表達式之前退出,因爲if(this.optional(element)) {...}線。 – matk

0

您需要使用[Required]屬性,使值不可選的,並使用正則表達式是通過改變*零個或多個)的+一個或多個)允許一個空字符串:

[Required] 
[RegularExpression(@"^\d*$")]