質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

664閲覧

PHPで、HEX色の短縮、展開について

qwertyuiop

総合スコア41

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/01/09 08:33

PHPにて、#fffを#ffffffに広げたり逆に短縮したいのですが、現在やっている方法のほかに良い方法はありますでしょうか。

現在は

php

1// 展開 2 3$color = strtolower($color); 4if(preg_match('/^#[a-f0-9]{3}$/', $color)) { 5 6 $result = '#'.substr($color, 1, 1).substr($color, 1, 1).substr($color, 2, 1).substr($color, 2, 1).substr($color, 3, 1).substr($color, 3, 1); 7 8} else { 9 $result = $color; 10} 11 12// 短縮 13$color = strtolower($color); 14if(preg_match('/^#[a-f0-9]{6}$/', $color)) { 15 16 if( 17 substr($color, 1, 1) === substr($color, 2, 1) && 18 substr($color, 3, 1) === substr($color, 4, 1) && 19 substr($color, 5, 1) === substr($color, 6, 1) 20 ) { 21 $result = '#'.substr($color, 1, 1).substr($color, 3, 1).substr($color, 5, 1); 22 } else { 23 $result = $color; 24 } 25 26} else { 27 $result = $color; 28}

という感じでsubstrでごり押してるのですが、コード的に少々気持ち悪く感じます。
このコードが最も速いコードなら良いのですが、ほかに良い方法などありますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

preg_replaceでやってしまってはどうでしょうか。

php

1// 伸ばす 2$long = preg_replace('/^#([a-f0-9])([a-f0-9])([a-f0-9])$/', '#$1$1$2$2$3$3', $color); 3 4// 縮める 5$short = preg_replace('/^#([a-f0-9])\1([a-f0-9])\2([a-f0-9])\3$/', '#$1$2$3', $color);

投稿2020/01/09 08:40

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/01/09 08:41

本題ではありませんが、大文字も受け付けるように[a-fA-F0-9]とするか、末尾を/iとするかをしたほうがいいかもしれません。
qwertyuiop

2020/01/09 08:51

なるほど、ありがとうございます! すごく助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問