我想在用户单击提交按钮后验证文本框值。我想检查文本中是否存在任何URL。如果存在,应该抛出一个错误。我需要阻止所有类型的URL
example.com
www.example.com
http://example.com
http://www.example.com
https://www.example.com
HTML代码:
<div>
<asp:TextBox ID="Textbox1" runat="server" ></asp:TextBox>
<asp:CustomValidator runat="server" OnServerValidate="ValidateNoUrls" ControlToValidate="Textbox1" ErrorMessage="URLs not allowed" />
<asp:Button ID="btnsubmit" runat="server" OnClick="btnsubmit_Click" Text="Sbumit"/>
</div>
后端代码:
protected void btnsubmit_Click(object sender, EventArgs e)
{
if(Page.IsValid)
{
Response.Write("Textbox Validated");
}
}
protected void ValidateNoUrls(object sender, ServerValidateEventArgs e)
{
bool res ;
res = Regex.IsMatch(e.Value, @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w++]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?");
if(res == true)
{
e.IsValid = false;
}
else
{
e.IsValid = true;
}
}
当前,它仅验证http://www.example.com
和https://www.example.com
。有人可以帮我吗?
答案 0 :(得分:0)
您可以使用System.Uri
进行验证
protected void ValidateNoUrls(object sender, ServerValidateEventArgs e)
{
System.Uri result = null;
e.IsValid = !System.Uri.TryCreate(e.Value, UriKind.Absolute, out result);
}
答案 1 :(得分:0)
很好回答您的问题,((ht|f)tp(s?)\:\/\/)?[0-9a-zA-Z]([-.\w++]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?
与您提到的所有URL匹配。 Here's个演示。基本上,只是将协议部分设为可选。
答案 2 :(得分:0)
谢谢大家的帮助。最后我用下面的代码解决了
protected void ValidateNoUrls(object sender, ServerValidateEventArgs e)
{
string pattern = @"^(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
e.IsValid = !reg.IsMatch(e.Value);
}