当我在具有以下正则表达式的页面上使用正则表达式验证器时:
<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
!
答案 0 :(得分:1)
首先,您没有使用^(regex goes here)$
锚定表达式。这里发生的是它成功匹配“google.com”部分。 RegularExpressionValidator 控件可能会隐式添加这些锚点 - 我不知道随意,因为我从不使用这些东西。
为了帮助您进一步调试,请使用Match.Value
属性,以便准确查看匹配的内容。
更重要的是,不要使用正则表达式来验证网址。 .NET中已经有一个Uri
类了。使用它的Parse
方法。
答案 1 :(得分:0)
我不是想象力的任何一个正则表达式专家,但它看起来并不像你在strRegex变量中的斜杠那样,因为你在声明的开头有@符号
尝试类似:
string strRegex = @"(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w- ;,./?%&=]*)?";