1

html/textの2つのケースがあります。

  1. My email is username@domen.com
  2. My email is <a href="mailto:username@domen.com">username@domen.com</a>

また、のようなメールリンクを検索して<a href="email@address">email@address</a>パターンに置き換える機能があり、動作します。しかし、テキストにすでに電子メールリンクが含まれている場合はどうなりますか。私もそれらを一致させたくありません。

function make_email_links($text)
{
  return  preg_replace(
     array('/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
       (\\.[A-Za-z0-9-]+)*)/iex'
       ),
     array( 
       "stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))" 
       ),
       $text
   );
}

で試してみました

'/((^<a) .......... )/iex'

しかし、それは失敗しました。テキストのような電子メールリンクのみを照合し、実際の電子メールリンクは照合しない方法は?

4

2 に答える 2

1

これを試してください:

$formattedTest = preg_replace("#(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $text);

私は古いものを使用しました(これは機能しません!):

$formattedTest = preg_replace('/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/', '<a href="mailto:\\1">\\1</a>', $text);

しかし、あなたが言ったように、すでにタグ内にある場合でも、私のメールが複製されていたでしょう.

于 2013-01-15T11:40:15.687 に答える
0

どうですか:

if (strstr($text, "<a href") !==false)
   return $text

preg_replace を実行する前に? (またはさらに保存された正規表現)。すべてを「1 つの」大きなパターンにまとめようとして時間を無駄にしないでください。心に留めておいてください: SourceCode は、書かれるよりも読まれることが多いです。

于 2013-01-15T11:52:54.857 に答える