怀孕用于验证URL

时间:2009-03-27 18:02:53

标签: regex

我正在寻找用于验证网址的'防弹'preg表达式。 正则表达式应该适用于以下地址

ftp://usernam@someurl.com
http://hh-1hallo.msn.blabla.com:80800/test/test/test.aspx?dd=dd&id=dki
http://twitter.com/test
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
telnet://example.org:8888
http://www.google.com/search?q=good+url+regex&rls=com.microsoft:*&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1
ftp://joe:password@ftp.filetransferprotocal.com
https://some-url.com?query=&name=joe?filter=*.*#some_anchor

但是应该对以下内容返回false:

http    .org    /TR/xhtml1/DTD/xhtml1-transitional.dtd
http://hh-1hallo. msn.blablabla.com:80800/test/test.aspx?dd=dd&id=dki 
google.com
example.org

2 个答案:

答案 0 :(得分:0)

网站有什么问题,例如RegExLib.com(“网址”部分)?

你应该找到你需要的东西并在那里自己测试。

无论如何,这个正则表达式验证了你想要的东西并排除了你不想要的东西。

(?ms)^(https?|ftp|telnet):\/\/((?:(?:(?=[^\r\n]*@)\w|-)+(?:(?::)(?:\w|-)+)?)?)@?((?:(?:(?:\w|-)+)\.)+(?:\w|-)+)(\:\d+)?((?:(?:/(?:\w|-)+(?:\.(?:\w|-)+)?)+)?)((?:\?(?:(?:\w|-)+\=(?:\w|[\.\-\*\:\+\#])*\&?)+)*)$

使用:

  • 第1组:协议
  • 第2组:用户名[:密码]
  • 第3组:域名(www.xxx)
  • 第4组:空
  • 第5组:地址(XX / yyy / zzzz)
  • 第6组:参数(?key1a = value1a& key2a = value2a?key1b = value1b& key2b = value2b ...)

答案 1 :(得分:0)

你走了:

\^(https?|ftp|telnet):\/\/((?:[a-z0-9@:.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?$/i

这是基于此处的代码:http://snipplr.com/view/6889/regular-expressions-for-uri-validationparsing/进行了多次修改。

您可以在此页面上进行测试: http://regexpal.com/ (将正则表达式粘贴为:

^(https?|ftp|telnet):\/\/((?:[a-z0-9@:.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?

并选择“不区分大小写”)

祝你好运!