携帯電話の番号、固定電話の番号を入れたら
自動で tel: リンクになるプラグインは無いでしょうか?
携帯電話の番号、固定電話の番号を入れたら
自動で tel: リンクになるプラグインは無いでしょうか?
プラグインとして実装するほどのものでも無さそうな気もしますので、正規表現で置き換えてみてはいかがでしょうか?
厳密なチェックはまた考えるとして、簡単なところでは
$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,3}\-[0-9]{4,5}\r)|([0-9]{11}\r)/i';
こうかな?
あ、改行コードによってはうまくいかないかも
こですかね
$pattern = '/([0-9]{2,5}\-[0-9]{2,4}\-[0-9]{4,5}(\n|\r\n))|([0-9]{11}(\n|\r\n))/i';上記2種類試しましたが、
リンクされなくなっちゃいました(泣)
$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;
}
こんな感じ?
すみません
改行ではなく、<br /></p>
だったみたいです。。。。
お願いします
すみません、やっつけ仕事です。
もっと効率よいプログラムはご自分で工夫するなり、他の諸先輩方のアドバイス待ちで・・・
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;
}ログイン しなければ投稿できません。