電話番号オートリンク(携帯)
-
プラグインとして実装するほどのものでも無さそうな気もしますので、正規表現で置き換えてみてはいかがでしょうか?
厳密なチェックはまた考えるとして、簡単なところでは
$contents が本文だとして$pattern = '/([0-9]{2,5}\-[0-9]{2,5}\-[0-9]{3,5})/i'; $link = '<a href="tel:\\1">\\1</a>'; $res = preg_replace($pattern, $link, $contents); print $res;
こんな感じとか?
できました
ありがとうございますハイフンなしで、番号(改行)
その行に11桁の番号のみ の場合もリンクさせたいのですが、
厳しいでしょうか、、、、
お手すきでお願いできませんかちょっと変えてみました。
市外局番が無い場合でもマッチさせます。それと11桁の決め打ちも。$pattern = '/([0-9]{2,5}\-[0-9]{2,3}\-[0-9]{4,5})|([0-9]{2,3}\-[0-9]{4,5})|([0-9]{11})/i'; $link = '<a href="tel:\\1\\2\\3">\\1\\2\\3</a>'; $res = preg_replace($pattern, $link, $contents); print $res;
携帯サイトだったら市外局番無しは不要ですね・・・
|([0-9]{2,3}\-[0-9]{4,5})
を削除していいと思います。ただ、番地などでもマッチしてしまいますので完全に自動というのは無理があるかもです。
たとえば
[tel]000-1111-2222
と書き込んだ場合に自動リンクにする。などのほうが使い勝手が良いかもですね。
あと、上記コードはあまりきれいじゃないと思いますので、動けばいいや!って程度に考えて下さい。即効対応ありがとうございます
メールが数字の場合もマッチしてしまいますね
http://coffee2code.com/wp-plugins/auto-hyperlink-urls/
のように、改行がないとリンクしないって出来ないでしょうか…
無理言ってスミマセンが、宜しくお願いしますあ、改行コードによってはうまくいかないかも
こですかね$pattern = '/([0-9]{2,5}\-[0-9]{2,4}\-[0-9]{4,5}(\n|\r\n))|([0-9]{11}(\n|\r\n))/i';
$pattern = '/([0-9]{2,5}\-[0-9]{2,4}\-[0-9]{4,5}(\n|\r\n))|([0-9]{11}(\n|\r\n))/i'; $link = '<a href="tel:\\1\\2">\\1\\2</a>'; $res = preg_replace($pattern, $link, $contents); print $res;
これでダメです?
<?php function tel_link($contents) { $pattern = '/([0-9]{2,5}\-[0-9]{2,4}\-[0-9]{4,5}(\n|\n\r|\r))|([0-9]{11}(\n|\n\r|\r))/i'; $link = '<a href="tel:\\1\\2\\3\\4\\5\\6">\\1\\2\\3\\4\\5\\6</a>'; $res = preg_replace($pattern, $link, $contents); $res = preg_replace('/\n|\n\r|\r/', '', $res); return $res; } print tel_link($contents); ?>
みずらいので関数にしましたが、うちのサーバでは動いてるんですけどねぇ。
念のため、パターンに \b をつけた方がいいですね。あと、地のハイフンにバックスラッシュは不要です。
$pattern = '/\b[0-9]{2,5}-?[0-9]{2,4}-?[0-9]{4,5}\s+/s';
かな? 電話番号はカッコを使うことも多いので、そういうのにも対応しようとすると、正規表現では苦しくなってきます。なるほど、では全てを加味して、11文字決め打ちも考慮する必要があるでしょうから
function tel_link($contents) { $pattern = '/(\b[0-9]{2,5}-[0-9]{2,4}-[0-9]{4,5}(\n|\r\n|\r))|(\b[0-9]{11}(\n|\r\n|\r))/s'; $link = '<a href="tel:\\1\\2\\3">\\1\\2\\3</a>'; $res = preg_replace($pattern, $link, $contents); $res = preg_replace('/\n|\r\n|\r/', '', $res); return $res; }
こんな感じ?
すみません、やっつけ仕事です。
もっと効率よいプログラムはご自分で工夫するなり、他の諸先輩方のアドバイス待ちで・・・function tel_link($contents) { $pattern = '/(\b[0-9]{2,5}-[0-9]{2,4}-[0-9]{4,5}<br \/>)|(\b[0-9]{11}<br \/>)/s'; $link = '<a href="tel:\">\</a>'; $res = preg_match_all($pattern, $contents, $buf); $buf2 = array_unique($buf[0]); foreach($buf2 as $val){ $buf3 = preg_replace('/\b<br \/>/s', '', $val); $contents = preg_replace('/\b'.$buf3.'/s', $link, $contents); } return $contents; }
- トピック「電話番号オートリンク(携帯)」には新たに返信することはできません。