2011-04-13 97 views
0

网站地址:正则表达式当我在页面上使用正则表达式验证器具有以下的正则表达式验证在ASP.NET

<asp:RegularExpressionValidator ID="regexWebsiteValidator" runat="server" ControlToValidate="ctlWS" ValidationExpression="(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?" ErrorMessage="Invalid Website Address!" /> 

,并输入http://www,google.com在文本框中, 如预期的验证失败。

如果我使用相同的正则表达式,但尝试使用Regex.Match匹配它,它会通过。有人能告诉我我做错了什么吗?

string strRegex = @"(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?"; 
bool b = System.Text.RegularExpressions.Regex.Match("http://www,google.com", strRegex).Success; 

b是true

回答

1

一件事,你是不是使用^(regex goes here)$锚固你的表达。这里发生的事情是它成功地匹配“google.com”部分。 RegularExpressionValidator控制可能会隐式添加这些锚 - 我不知道非正式因为我从不使用这些东西。

为了帮助您进一步调试,请使用Match.Value属性,以便您可以确切地查看匹配的内容。

更重要的是,不使用正则表达式来验证URL。 .NET中已有一个Uri类。使用它的方法是Parse

+0

哇,这工作!你能用'^(myregex)$'解释表达式的锚定吗? – Dusty 2011-04-13 19:08:56

+0

'^'和'$'是正则表达式“锚”。 '^'匹配输入的开始,而'$'匹配结束。我建议www.regular-expressions.info了解更多信息。 – 2011-04-15 13:34:44

0

我不会被任何想象一个正则表达式的专家,但它并不像你在逃避你strRegex变斜线,你已经得到了@符号在声明的开头

尝试类似:

string strRegex = @"(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w- ;,./?%&=]*)?"; 
+0

“@”前缀使得字符串被字面解释。反斜杠不再被解释为转义序列。 – 2011-04-13 15:27:58