RegEx使用可选的Scheme验证URL

时间:2013-09-21 14:22:53

标签: c# regex

我想使用正则表达式验证网址。以下是验证URL的条件:

  1. Scheme是可选的
  2. 应允许子域名
  3. 应允许端口号
  4. 应该允许路径。
  5. 我正在尝试以下模式:

    ((http|https)://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
    

    但我没有得到预期的结果。即使像'* .example.com'这样的无效网址也会匹配。

    它出了什么问题?

4 个答案:

答案 0 :(得分:1)

你匹配整个字符串吗?你没有说你正在使用什么语言,但在python中看起来你可能正在使用search而不是match

解决此问题的一种方法是使用^开始regexp并以$结束。

答案 1 :(得分:0)

虽然解析URL最好留给库(因为我知道perl最好,我会建议类似http://search.cpan.org/dist/URI/),如果你想要一些帮助来调试那个语句,最好在调试器中尝试一下,例如:http://www.debuggex.com/

我认为它匹配的主要原因之一是因为你没有使用开始和结束字符串匹配标记。意思是,该字符串的任何部分都不能与显式内容相匹配,但由于您没有使用字符串的开头和结尾标记对其进行标记,因此您的正则表达式可能只匹配字符串中的“example.com”,而不是整个输入。

答案 2 :(得分:0)

在输入的帮助下找到我的病情的正则表达式

^(http(s)?://)?[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-‌​\.\?\,\'\/\\\+&%\$#_]*)?$

答案 3 :(得分:0)

以下代码在c#中对我有用

private static bool IsValidUrl(string url)
{
     return new Regex(@"^(http|http(s)?://)?([\w-]+\.)+[\w-]+[.\w]+(\[\?%&=]*)?").IsMatch(url) &&!new Regex(@"[^a-zA-Z0-9]+$").IsMatch(url);
}

它允许“有或没有http(s)和www的任何东西。