2009-04-26 51 views
11

我在Web窗體中的RegularExpressionValidator上設置了以下正則表達式作爲ValidationExpression屬性。當我在驗證的控件中輸入非法字符時,驗證程序檢測到它並顯示一條錯誤消息。RegularExpressionVididator不檢測空字符串

<appSettings> 
    <add key="categoryPattern" value="^[a-zA-Z0-9_+\-() ]{1,50}$" /> 
</appSettings> 

我的驗證:

<asp:RegularExpressionValidator ValidationExpression="<%$ AppSettings:categoryPattern %>" 

我的服務器端驗證:

Regex rex = new Regex(ConfigurationManager.AppSettings["categoryPattern"]); 
if (!rex.Match(categoryName).Success) 
{ 
    throw new ArgumentException("CategoryName must match expression: " + rex); 

正如你所看到的,完全一樣的模式應用於客戶端和服務器端。

但是,當我清除驗證的控件並提交一個空字符串時,驗證程序認爲它正常,並且從我的服務器端驗證中得到一個錯誤。除了RegularExpressionValidator的破壞合同之外,任何人都知道這裏有什麼問題?

回答

17

它是由設計。您還應該添加RequiredFieldValidator以強制用戶輸入。 RegularExpressionValidator將空字段視爲有效(甚至不通過Regex運行它們)。這背後的原因是,例如,您可能有一個不需要的形式的可選Email address 2字段,但如果它被輸入,它應該是一個有效的電子郵件地址。爲了實現這一點,其他驗證器忽略空字段,如果您需要使其成爲必需,您只需添加另一個RequiredFieldValidator

實際上,沒有必要手動在服務器上重新驗證。 ASP.NET驗證器也支持構建它的服務器端驗證。你可以檢查Page.IsValid屬性。

+0

感謝@Mehrdad,我添加了一個RequiredFieldValidator,但是我的服務器驗證不在頁面上,而是在頁面使用的類中,以及可能的其他代碼中,所以我保留這一點。 – ProfK 2009-04-26 19:33:27