БлогNot. PHP: почему не нужно искать URL-адреса регулярками

PHP: почему не нужно искать URL-адреса регулярками

Потому что с версии 5.2 есть функция filter_var с рядом готовых фильтров на данные, вот их списки.

В частности, есть FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_IP, FILTER_VALIDATE_URL и т.п., писать вот такие выражения становится излишеством.

Приведём пример того, как из массива строк $tests вытаскиваются URL-адреса, код выполнялся на Denwer и предполагает, что файл размещён к кодировке Юникода UTF-8.

<?php
$tests = array(
    'this URI contains an illegal character, parentheses and a misplaced full stop:',
    'http://en.wikipedia.org/wiki/Erich_Kastner_(camera_designer).  
       (which is handled by http://mediawiki.org/).',
    'and another one just to confuse the parser: http://en.wikipedia.org/wiki/-)',
    '")" is handled the wrong way by the mediawiki parser.',
    'ftp://domain.name/path(balanced_brackets)/foo.html',
    'ftp://domain.name/path(balanced_brackets)/ending.in.dot.',
    'ftp://domain.name/path(unbalanced_brackets/ending.in.dot.',
    'leading junk ftp://domain.name/path/embedded?punct/uation.',
    'leading junk ftp://domain.name/dangling_close_paren)',
    'if you have other interesting URIs for testing, please add them here:',
    'http://www.example.org/foo.html#includes_fragment',
    'http://www.example.org/foo.html#enth&#228;lt_Unicode-Fragment',
    ' http://192.168.0.1/admin/?',
    'blah (foo://domain.hld/))))',
    'https://haxor.ur:8080/~foo/####&?bar'
);
 
foreach ($tests as $test) {
 foreach (preg_split("/\s/msiu",$test ) as $uri) {
  if (filter_var ($uri, FILTER_VALIDATE_URL)) {
   echo '<br>'.$uri; //Просто печатаем найденный URI
  }
 }
}
?>

10.11.2018, 12:57 [1590 просмотров]


теги: программирование памятка php форматы

К этой статье пока нет комментариев, Ваш будет первым