1

テキスト内の URL を検索してリンクに置き換える正規表現があります。

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 );

問題は、誰かが「ie」を含むテキストを入力すると、それがリンクにも変換されることです。これは起こるべきではありません。この正規表現を制限して、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 );
4

1 に答える 1

2

preg_replace_callbackキャプチャされたテキストに少なくとも5または6charsがあるかどうかを確認するために使用できます。

preg_replace_callback( '@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)([-A-Z0-9+&#/%=~_|$?!:,.]{3,})*[A-Z0-9+&#/%=~_|$]@i', function($matches){
   if(strlen($matches[0])>5){
      return '<a href="'.$matches[0].'" target="_blank" rel="nofollow">'.$matches[0].'</a>';
    }else{
       return $matches[0];
     }
   }, $text );
于 2012-11-25T08:33:08.123 に答える