我正在寻找用于验证网址的'防弹'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
答案 0 :(得分:0)
网站有什么问题,例如RegExLib.com(“网址”部分)?
你应该找到你需要的东西并在那里自己测试。
无论如何,这个正则表达式验证了你想要的东西并排除了你不想要的东西。
(?ms)^(https?|ftp|telnet):\/\/((?:(?:(?=[^\r\n]*@)\w|-)+(?:(?::)(?:\w|-)+)?)?)@?((?:(?:(?:\w|-)+)\.)+(?:\w|-)+)(\:\d+)?((?:(?:/(?:\w|-)+(?:\.(?:\w|-)+)?)+)?)((?:\?(?:(?:\w|-)+\=(?:\w|[\.\-\*\:\+\#])*\&?)+)*)$
使用:
答案 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})*))?
并选择“不区分大小写”)
祝你好运!