2009-12-15 66 views
1

C#正则表达式如何由单一的正则表达式验证网址:极品URL验证

http://83.222.4.42:8880/listen.pls 
http://www.my_site.com/listen.pls 
http://www.my.site.com/listen.pls 

是真的吗?

我看到我提出的问题不完全:(对不起,我的错误。想法是,我想验证与regexp有效的URL的帮助,让它是一个外部IP地址或域名。这个想法,其他有效的URL可以考虑:?

http://93.122.34.342/ 
http://193.122.34.342/abc/1.html 
http://www.my_site.com/listen2.pls 
http://www.my.site.com/listen.php 

+2

有没有这样的事情作为“C#正则表达式”;正则表达式是一个正则表达式,对吗?为了得到你想要/需要的答案,最好是更全面地指定你的问题。 – peSHIr 2009-12-15 08:41:04

+0

我们需要更多地了解您想要匹配的模式。 3个例子是不够的。形容它。 – 2009-12-15 08:48:32

+5

有很多稍微不同的正则表达式的风格,所以指定c#是一个好主意 – 2009-12-15 08:55:29

回答

1

你的意思是用/listen.pls结尾的网址在这种情况下,试试这个:

^http://[^/]+/listen\.pls$ 

或者如果协议标识符必须是选择性的:

^[http://]?[^/]+/listen\.pls$ 

反正这里看看,也许对你有用:Url and Email validation using Regex

+1

如果URL包含目录,则不起作用。包含拼写错误“.ps” - >“.pls”。 – 2009-12-15 08:21:21

+0

不完全是,我重新提出了这个问题,看看我编辑过的东西。 – diadiora 2009-12-16 10:34:11

1
/^http:\/\/[-_a-zA-Z0-9.]+(:\d+)?\/listen\.pls$/ 
+0

与第一个不匹配 – 2009-12-15 08:19:52

+0

@twaltari:啊,谢谢。我修好了它。 – Asaph 2009-12-15 08:38:03

+0

不完全是我想要的,对不起我的错误,我重新提出了这个问题,看看我编辑过的内容。 – diadiora 2009-12-16 10:34:43

1

^HTTP://.+/listen \ .PLS $

+1

您可以在答案中添加更多细节吗?虽然简短的答案可能有助于指出正确的方向,但有助于进一步解释。 – bjb568 2014-08-05 19:12:53

+0

任何以“http://”开头并以“/listen.pls”结尾的内容 – 2014-08-08 07:51:08

1

如果严格只有3个不打扰正则表达式,因为当一切都已经严格知道时,不一定有很好的模式匹配 - 事实上,您可能会意外地匹配更多如果网址是用于安全目的,或者同等重要的话,这会成为问题。相反,直接测试三种情况 - 也许把它们放在配置文件中。

未来,如果您想向列表中添加更多网址,您可能会得到一个日益难以维护的过于复杂的正则表达式,并会取代简单的小列表检查。

通过运行Regex找到这三个字符串,您不一定会获得速度提升 - 事实上它可能相当昂贵。

注意:如果你想让Uri正则表达式也尝试托管图书馆的网站,如Regex Library - 如果你的需求发生变化,有很多选择。

7

地狱之路铺满了字符串解析。

URL解析特别是许多被利用的安全问题的来源。不要这样做。

例如,你想让它匹配吗?

 
    

注意大写方案部分。请记住,URL的某些部分区分大小写,有些则不区分大小写。然后是编码规则。等等。

开始使用System.Uri解析您提供的网址:

var uri = new Uri("http://83.222.4.42:8880/listen.pls"); 

然后,你可以写的东西,如:

if (uri.Scheme == "http" && 
    uri.Host == "83.222.4.42" && 
    uri.AbsolutePath == "/listen.pls" 
    ) 
{ 
    // ... 
} 
0

Jay Bazuzi's solution修改后的版本的基础之上,因为我不能发布代码在评论中,它会检查一个列入黑名单的扩展名(我这样做只是为了演示目的,您应该强烈建议构建一个白名单而不是黑名单):

string myurl = "http://www.my_site.com/listen.pls"; 
Uri myUri = new Uri(myurl); 
string[] invalidExtensions = { 
    ".pls", 
    ".abc" 
}; 

foreach(string invalidExtension in invalidExtensions) { 
    if (invalidExtension.ToLower().Equals(System.IO.Path.GetExtension(myUri.AbsolutePath))) { 
     //Logic here 
    } 

}