• 携帯電話の番号、固定電話の番号を入れたら
    自動で tel: リンクになるプラグインは無いでしょうか?

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • プラグインとして実装するほどのものでも無さそうな気もしますので、正規表現で置き換えてみてはいかがでしょうか?

    厳密なチェックはまた考えるとして、簡単なところでは
    $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;

    こんな感じとか?

    トピック投稿者 shiro99

    (@shiro99)

    できました
    ありがとうございます

    ハイフンなしで、番号(改行)
    その行に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
    と書き込んだ場合に自動リンクにする。などのほうが使い勝手が良いかもですね。
    あと、上記コードはあまりきれいじゃないと思いますので、動けばいいや!って程度に考えて下さい。

    トピック投稿者 shiro99

    (@shiro99)

    即効対応ありがとうございます
    メールが数字の場合もマッチしてしまいますね
    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';
    トピック投稿者 shiro99

    (@shiro99)

    上記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);
    ?>

    みずらいので関数にしましたが、うちのサーバでは動いてるんですけどねぇ。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    念のため、パターンに \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;
    }

    こんな感じ?

    トピック投稿者 shiro99

    (@shiro99)

    すみません
    改行ではなく、<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;
    }
13件の返信を表示中 - 1 - 13件目 (全13件中)
  • トピック「電話番号オートリンク(携帯)」には新たに返信することはできません。