Проверка PHP / регулярное выражение для URL

Когда вы вызываете delete на указателе, выделенном new, вызывается деструктор объекта, на который указывает.

A * p = new A;

delete p;    // A:~A() called for you on obkect pointed to by p
118
задан Zoe 5 May 2019 в 21:04
поделиться

6 ответов

Я использовал это на нескольких проектах, я не полагаю, что столкнулся с проблемами, но я уверен, что это не является исчерпывающим:

$text = preg_replace(
  '#((https?|ftp)://(\S*?\.\S*?))([\s)\[\]{},;"\':<]|\.\s|$)#i',
  "'<a href=\"$1\" target=\"_blank\">$3</a>$4'",
  $text
);

большая часть случайного спама в конце должна справиться с ситуациями как http://domain.com. в предложении (чтобы не соответствовать запаздывающему периоду). Я уверен, что это могло быть очищено, но так как это работало. Я более или менее только что скопировал его от проекта до проекта.

75
ответ дан nhahtdh 6 May 2019 в 07:04
поделиться
  • 1
    Спасибо, Deepak, но это дополнение смотрят, как будто это просто обеспечивает инструменты, чтобы работать с локальными XML-файлами, не работать с файлами, подаваемыми веб-сервером и отображенными в браузере. – dotancohen 7 November 2012 в 08:26

Я использовал этого с хорошим успехом - я не помню, где я получил его от

$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
6
ответ дан Peter Bailey 6 May 2019 в 07:04
поделиться
  • 1
    никогда не умел заставить его создать! – ZeroCool 12 June 2012 в 21:18

Используйте эти filter_var() функция, чтобы проверить, является ли строкой URL или нет:

var_dump(filter_var('example.com', FILTER_VALIDATE_URL));

Это - плохая практика для использования регулярных выражений, если не необходимых.

РЕДАКТИРОВАНИЕ : Будьте осторожны, это решение не unicode-безопасно и не XSS-безопасно. При необходимости в сложной проверке возможно, лучше посмотреть где-то в другом месте.

202
ответ дан Stanislav 6 May 2019 в 07:04
поделиться
  • 1
    +1, поскольку я соглашаюсь - Это может быть полезно, но в практике конца и твердой базе знаний более полезны. – Chris Lutz 24 August 2009 в 12:03

Согласно руководству PHP - parse_url должен не использоваться для проверки URL.

, К сожалению, кажется, что filter_var('example.com', FILTER_VALIDATE_URL) не работает немного лучше.

И parse_url() и filter_var() передаст уродливые URL такой как http://...

Поэтому в этом случае - regex лучший метод.

27
ответ дан catchdave 6 May 2019 в 07:04
поделиться
  • 1
    TS, которую спрашивают о c/c ++, кодирует completetion для Emacs не Python... – denys 30 July 2012 в 21:37

Редактирование:
Как падение указало, что этот код был УДЕРЖАН ОТ ИСПОЛЬЗОВАНИЯ с выпуском PHP 5.3.0 (2009-06-30) и должен использоваться соответственно.

<час>

Просто мои два цента, но я разработал эту функцию и использовал ее некоторое время с успехом. Это хорошо документируется и разделяется так, можно легко изменить его.

// Checks if string is a URL
// @param string $url
// @return bool
function isURL($url = NULL) {
    if($url==NULL) return false;

    $protocol = '(http://|https://)';
    $allowed = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';

    $regex = "^". $protocol . // must include the protocol
             '(' . $allowed . '{1,63}\.)+'. // 1 or several sub domains with a max of 63 chars
             '[a-z]' . '{2,6}'; // followed by a TLD
    if(eregi($regex, $url)==true) return true;
    else return false;
}
4
ответ дан Community 6 May 2019 в 07:04
поделиться
  • 1
    #archeology я несколько раз пытался (2 или 3) использовать GCCsense в течение прошлых 10 лет без успеха. Вам на самом деле удавалось настроить его и сделать его работами правильно. Завершение хорошо теперь? То, что частные данные появляются в демонстрационном завершении, не является хорошим знаком... – log0 2 March 2012 в 13:07

Регулярное выражение Питера мне не кажется правильным по многим причинам. Он позволяет использовать всевозможные специальные символы в доменном имени и не требует особых проверок.

Фрэнки ' s функция мне нравится, и вы можете создать хорошее регулярное выражение из компонентов, если вам не нужна функция, например:

^(http://|https://)(([a-z0-9]([-a-z0-9]*[a-z0-9]+)?){1,63}\.)+[a-z]{2,6}

Непроверено, но я думаю, что это должно работать.

Кроме того, ответ Оуэна не выглядит 100% тоже. Я взял доменную часть регулярного выражения и протестировал ее с помощью инструмента тестера Regex http://erik.eae.net/playground/regexp/regexp.html

Я поместил следующую строку:

(\S*?\.\S*?)

в раздел "регулярное выражение" и следующую строку:

-hello.com

в разделе «образец текста».

Результат допускает прохождение символа минус. Потому что \ S означает любой непробельный символ.

Обратите внимание, что регулярное выражение от Frankie обрабатывает минус, потому что оно содержит эту часть для первого символа:

[a-z0-9]

Что не позволяет использовать минус или другие специальные символы.

0
ответ дан 24 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: