RegEx检测语法正确的URL

时间:2011-03-21 11:07:13

标签: c# asp.net regex

我使用的是Asp.net 4和C#Web Forms。

在我的Web应用程序中,用户可以使用TextBox添加URL。

我需要确保插入的每个值都具有语法正确的URL格式(我不需要检查URL是否真的存在)。

因此,作为第一条规则,如果用户插入的输入在开头有值字符串“http://”,我想使用CustomValidator Control进行检查。

我的问题?

  • 你是否可以向我提供一个RegEx来添加到我的CustomValidator Control中,它只允许传递以“http://”开头的字符串?

  • 您有使用RegEx建议我的其他规则吗?

  • 检测检测语法正确的网址的最佳做法是什么?

感谢您的帮助

3 个答案:

答案 0 :(得分:9)

在许多方面采用更简单的方法,并且对以后的更改更加灵活,只需尝试并查看:

public static bool IsValidHttpUri(string uriString)
{
  Uri test = null;
  return Uri.TryCreate(uriString, UriKind.Absolute, out test) && test.Scheme == "http";
)

使用Uri.IsWellFormedUriString更容易,但不会检查您的URI必须是HTTP的要求。

编辑:哦,这是否认为IRI有效取决于配置,请参阅http://msdn.microsoft.com/en-us/library/system.uri.aspx上的“国际资源标识符支持”部分。通常,您是否希望它们被视为有效将匹配无论如何,这种配置设置,所以在大多数情况下这实际上是一个好处。

答案 1 :(得分:0)

Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase);

答案 2 :(得分:0)

在我的(有限的)经验中,正则表达式为这么简单的任务浪费了大量资源(字符串以http://或https://开头)

您可能需要考虑检查网址是否包含“非法”字符。 about urlencoding