preg для проверки URL - PullRequest
1 голос
/ 27 марта 2009

Я ищу «пуленепробиваемое» выражение preg для проверки URL. Регулярное выражение должно быть истинно для следующих адресов

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 голосов
/ 27 марта 2009

Вот, пожалуйста:

\^(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})*))?

и выберите «без учета регистра»)

Удачи!

0 голосов
/ 27 марта 2009

Что не так с таким веб-сайтом, как RegExLib.com (раздел "url")?

Вы должны найти то, что вам нужно, и проверить это там сами.

В любом случае, это регулярное выражение проверяет, что вы хотите, и исключает то, что вы не хотите.

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

с:

  • группа 1: протокол
  • группа 2: имя пользователя [: пароль]
  • группа 3: домен (www.xxx)
  • группа 4: пусто
  • группа 5: адрес (XX / ггг / zzzz)
  • группа 6: параметры (? Key1a = значение1a & key2a = значение2a? Key1b = значение1b & key2b = значение2b ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...