2010-03-03 49 views
3

我正在使用ASP驗證控件來測試多行文本框的內容是否在2到40個字符之間。可以提供任何字符,包括新行字符。這將是什麼表達?我下面的失敗。正則表達式來測試範圍內的任何字符數

<asp:RegularExpressionValidator ID="RegularExpressionValidator" 
    runat="server" 
    ValidationExpression="^[.]{2,40}$" 
    ControlToValidate="CommentsTextBox" 
    ErrorMessage="The Comment field must be between 2 and 40 characters" 
    Display="Dynamic">*</asp:RegularExpressionValidator> 

回答

3

當你把點放在方括號內,它失去了它的特殊含義,只是匹配一個文字點。匹配在ASP的RegularExpressionValidator任何字符最簡單的方法是這樣的:

^[\s\S]{2,40}$ 

[\s\S]是標準的JavaScript成語包括換行符匹配任何東西(因爲JS不支持DOTALL或S模式,它允許點以匹配換行符)。它在.NET中的工作原理相同,因此您不必擔心點是否與換行符匹配,或者是否將正則表達式應用於服務器或客戶端。

+0

JavaScript支持的好處,因爲這個測試是運行客戶端和服務器端我會採用這種方法。 – Josh 2010-03-04 12:56:11

1

您正在將句號視爲方括號內的文字。你只是想:

^(.|\n){2,40}$ 
+0

請記住,這會將'\ n'計爲2個字符。因此,如果您在多行文本框中限制了40個字符,則只有存在'\ n'時,用戶纔可以輸入38個字符。此外,如果他們只輸入一個回車符('\ n')而沒有其他內容,即使沒有實際輸入文本,2個字符的下限也會通過。 – Kelsey 2010-03-04 00:41:10

+0

@Kelsey:是不是在文本框中按下Enter鍵會插入一個回車符*和一個換行符(CRLF)?所以'.'匹配CR和'\ n'匹配LF;沒有東西被算兩次。 – 2010-03-04 04:14:25

+0

新行計數爲2個字符的好處 – Josh 2010-03-04 12:48:08