у меня есть регулярное выражение, которое находит URLs в тексте и заменяет их со ссылкамиPHP регулярное выражение, чтобы запретить слишком короткий URLs
preg_replace('@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0" target="_blank" rel="nofollow">\0</a>', $text);
Проблема заключается в том, когда кто-то типы текста, который содержит «то есть» он преобразует его также к ссылке, которой не должно быть. Как ограничить это регулярное выражение, чтобы заменить строки длиной более 3 символов?
Я попытался поставить {3,}
, но он не работает.
preg_replace('@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)
([-A-Z0-9+&#/%=~_|$?!:,.]{3,})*[A-Z0-9+&#/%=~_|$]@i', '
<a href="\0" target="_blank" rel="nofollow">\0</a>', $text);
Великие, это работает! просто ребята помните, чтобы поставить «return» перед preg_replace_callback, если у вас есть этот код, завернутый в функцию text_to_url ($ text) –
, конечно, вы должны поставить оператор return, если вы его обернете. Но это не было в вашем вопросе – artragis