2013-05-28 38 views
0

我一直在嘗試驗證多行文本框。當然,這是行不通的。多行文本框新行字符regularexpressionvalidator問題

<asp:TextBox ID="t_noteTextBox" runat="server" Width="700" Text='<%# Bind("t_note") %>' TextMode="MultiLine" Rows="3" MaxLength="700" /> 
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="Special Characters not allowed." ForeColor="Red" 
    ControlToValidate="t_noteTextBox" ValidationExpression="(?m)([a-z]|[A-Z]|[0-9]|[ ]|[-]|[_]|[.]|[,]|[\r]|[\n])*" Display="Dynamic"></asp:RegularExpressionValidator> 
<asp:RegularExpressionValidator runat="server" ID="valInput" ControlToValidate="t_noteTextBox" ValidationExpression="^[\s\S]{0,740}$" 
    ErrorMessage="Please enter a maximum of 740 characters" Display="Dynamic" ForeColor="Red"></asp:RegularExpressionValidator> 

只要我不添加回車,表達式就可以正常工作。一旦我去到一個新的行,我得到一個錯誤。 我甚至擡起頭,發現?m多行選項。 然而,這也不起作用。 在Expresso中測試正則表達式效果很好。

(?m)([a-z]|[A-Z]|[0-9]|[ ]|[-]|[_]|[.]|[,]|[\r]|[\n])* 

但是,只要我把它放在網站上它不會。 任何想法?

+0

什麼類型的錯誤是你得到 – Anirudha

+0

這是行不通的。當你去到一條新線時,它會停下來。 – Prescient

回答

1

多行模式改變了錨(^$),您不使用的行爲。

單線模式導致點元字符匹配的所有內容,包括換行,但您沒有以這種方式使用點。像大多數元字符一樣,點在字符類中失去其特殊含義,所以[.]只是與字面值.匹配。

我懷疑你的問題是你允許在客戶端進行驗證。也就是說,您沒有將EnableClientScript設置爲「false」。客戶端驗證使用JavaScript而不是.NET,JavaScript正則表達式不支持內聯修飾符,如(?m)(?s)。但是這對你並不重要,因爲你沒有使用點作爲元字符。

這應該是所有你需要:

ValidationExpression="[a-zA-Z0-9_.,\s-]*" 
+0

我認爲我們遇到了asp.net更改正則表達式的問題。我把上面的內容和asp.net改變代碼爲 '([az] | [AZ] | [0-9] | [] | [ - ] | [_] | [。] | [,]) *' – Prescient

0

你可以簡化這一點。

(?m)([\w., -])* 

多行標誌(?m)只允許錨^$之前和之後的換行符匹配,而不是開始和字符串的結尾一般,所以它不是做你想要的這裏。

如果您使用\s而不是匹配空格,它也會匹配換行符。

([\w.,\s-])* 
+0

([\ w。,\ s - ])*仍會觸發錯誤 – Prescient

+0

您可以試試這個嗎? '^ [\ w \ s/\ n/\ r。, - ] * $' – melwil

+0

[\ w \ s/\ n/\ r。, - ] *暫停。 – Prescient