【发布时间】:2019-04-07 18:17:07
【问题描述】:
我正在尝试编写一个函数,该函数将采用 RGB(A) 颜色并将其值保存在数组中,并可选择排除 alpha 值。我无法弄清楚如何编写与输入匹配的正则表达式,但我认为我正在寻找这样的东西:
function rgb_array( $color, $include_alpha = true ) {
$pattern = 'what goes here?';
$color = preg_match( $pattern, $color, $matches);
if ( $include_alpha == true && ! empty( $matches[4] ) ) {
$color = array( $matches[1], $matches[2], $matches[3], $matches[4] );
} else {
$color = array( $matches[1], $matches[2], $matches[3] );
}
return $color;
}
我希望能够为它提供任何有效形式的 rgb/rgba:
rgb(0,0,0)
rgb(00,00,00)
rgb(0, 0, 0)
rgb(00, 00, 00)
rgba(0,0,0,0.5)
rgba(255, 255, 255, 1)
etc...
并让它产生一个数组:
[0] => '00', // red
[1] => '00', // green
[2] => '00', // blue
[3] => '1' // alpha only included if available and desired.
目前我可以通过str_replace 完成此操作:
$color = 'rgb(12, 14, 85)';
$remove = array( 'rgb', 'a', '(', ')', ' ' );
$color = str_replace( $remove, '', $color );
$color = explode( ',', $color );
但它感觉很老套,我找不到选择包含/排除 alpha 的好方法。
感谢您的帮助,如果有与 preg_match 完全不同的方法会更好,我会全力以赴。
【问题讨论】:
-
为什么不简单地用逗号分割,那么你将有一个包含每个的数组。
-
我目前正在使用
explode()执行此操作,正如我在最后展示的那样,但是如果我保留它,那么我需要一种方法来从数组中排除不需要的 alpha 值或传递颜色不包括它。