2010-03-16 56 views
0

我需要確保輸入值包含至少一個點,所以我使用了以下內容:反斜槓中的RegularExpressionValidator

<asp:RegularExpressionValidator runat="server" 
ControlToValidate="MyInput" Text="*" 
ErrorMessage="must contain at least one dot" 
ValidationExpression="\.+" /> 

這是行不通的。通過檢查頁面源,我可以看到ASP.NET轉義反斜槓字符,所以在java腳本中它看起來像"\\.+"。爲什麼它這樣做,我如何防止RegularExpressionValidator逃脫它?

回答

1

如果要檢查輸入是否至少包含一個點,則表達式不正確。它僅匹配僅由點組成的輸入。

您應該使用

.*\..* 

如果轉義證明是一個問題,也使用[.]代替\.

請注意,RegularExpressionValidator不驗證空字段。使用RequiredFieldValidator來執行此操作。

+0

你確定'RegularExpressionValidator'隱式搜索字符串的開始和結束嗎? AFAIK它不*,因此'\ .'應該是一個足夠的模式。 – 2010-03-16 09:59:30

+0

我剛測試過它。它的確如此。至少我在我的網站上使用這個。 – Jens 2010-03-16 10:00:57

+0

謝謝!這意味着默認的JS regexp選項與.NET Regex類不同,因爲後者工作正常。這很奇怪 - 如果我們禁用了JS,RegularExpressionValidator應該使用服務器端檢查(即Regex類),不應該嗎? – UserControl 2010-03-16 10:02:43

1

雙重轉義是必要的,因爲反斜槓用於JavaScript和正則表達式中的轉義序列。一個快速測試來說明這一點:

alert('42'.match("\d"));  // no match 
alert('42'.match("\\d")); // match 

但這並不能解決您的問題。麻煩的第一步:將驗證表達式更改爲a。它不會在「foo」上失敗並傳遞「bar」嗎?如果沒有,頁面上的其他內容可能會出錯 - 可能是一個無關的JavaScript錯誤導致驗證代碼被跳過。

稍微偏離主題:您的驗證表達式可以修剪爲\.(沒有加號),因爲您確實只關心匹配一個點。

+0

單個反斜槓也可以工作: 'alert('12.3'.match(「\。」));' – UserControl 2010-03-16 09:57:47

+0

@frogbot:你說得對。我已經更新了一個更好的示例。 – 2010-03-16 10:02:31