我肯定在這裏錯過了一些東西,因爲我期望的工作方式相同,工作方式不同。RegularValidator與Regex.Match在CustomValidator中
假設下面的RegularExpressionValidator語法
<asp:RegularExpressionValidator runat="server" ID="rxEmail" ControlToValidate="txEmail"
ValidationExpression="<%$ appsettings:rxEmail %>" Text="*" />
和以下的CustomValidator語法/代碼
<asp:CustomValidator ID="cvEmail" runat="server" Text="*" onServerValidate="validateContactFormat" />
Sub validateContactFormat(ByVal sender As Object, ByVal args As ServerValidateEventArgs) Handles cvContactFormat.ServerValidate
Dim emailRegEx As Regex = New Regex(ConfigurationManager.AppSettings("rxEmail"))
args.IsValid = emailRegEx.IsMatch(txEmail.Text)
End Sub
web.config中保持的表達是
[\w-][email protected]([\w-]+\.)+[\w-]+
這被認爲是簡單,並排除了最明顯的問題,而不是太照片KY。
Anywho,給定輸入[email protected] - RegularExpressionValidator失敗,但CustomValidator通過。其他情況按預期工作..都通過[email protected],但會失敗blah.com。可能還有其他問題,但這是我注意到的一個問題。
我猜CustomValidator中的代碼和RegularExpressionValidator在'幕後'會產生什麼不一樣 - 但究竟有什麼區別,爲什麼我會看到我所看到的?
非常感謝!
精彩的回答:)大加讚賞 –
@TablooQuijico:不客氣,你是不是成爲第一個被.NET團隊的決定搞糊塗了,用IsMatch()代替了Search()或Find()或IsSubmatch(),或者任何並不意味着完全匹配的東西。 –