asp.net regularexpressionvalidator没有按预期工作

时间:2013-07-24 09:29:49

标签: asp.net regex

我有以下文本框控件和正则表达式验证器:

<asp:TextBox runat="server" ID="ATextBox" style="width:400px;"/>
                <asp:RegularExpressionValidator runat="server" ID="ATextBoxRegularExpressionValidator" Display="Dynamic"
                    ControlToValidate="ATextBox" ValidationExpression="^([a-zA-Z0-9]+)|((https?://)?([\w-]+\.)+[\w-]+(/[-\w ;,./?%&=]*)?)$" 
                    ErrorMessage="<%$ Resources:Antivirus, AVURL_InvalidLink %>">
                                       </asp:RegularExpressionValidator>

正则表达式为:

^([a-zA-Z0-9]+)|((https?://)?([\w-]+\.)+[\w-]+(/[-\w ;,./?%&=]*)?)$

当我使用任何验证器表达式测试器测试时,它可以工作,如:

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

基本上,正则表达式应该接受所有URL和主机名。

太好了: 谷歌 google.com http://google.com https://google.com

为:

<asp>http://google.com</asp>

任何人都知道为什么我的正则表达式在应用程序中运行时失败了以下内容: google.com http://google.com https://google.com

更新

我设法解决了我的问题....正在做我想做的正则表达式是:

^((https?://)?([\ w-] +。) [\ w-] +(/ [ - \ w;,。/?%&amp; =] )?)$

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我想说第一个问题是/需要转义:

^([a-zA-Z0-9]+)|((https?:\/\/)?([\w-]+\.)+[\w-]+(\/[-\w ;,.\/?%&=]*)?)$

下一个感兴趣的问题是,您目前拥有的正则表达式并不真正匹配整个URL,它匹配并分组部分。但也许这就是你想要的。

以下是Rubular,其中包含修改过的Regex和您注意到的值。