基于给定的十六进制颜色代码在字符串中创建标记样式

Create markup styling in a string based on given hex color codes

本文关键字:字符串 创建 样式 代码 颜色 十六进制      更新时间:2023-09-26

三叉戟

正如您所知,CSS中的颜色可以用RGB模型(rgb(255, 255, 255)(或十六进制代码(#ffffff#fff(表示,后者通常较短。这两个例子都代表白色。

问题

由于语法较短,我们可以很容易地在字符串中嵌入/插入十六进制代码。我想要的函数将删除这些十六进制代码(表示为给定字符串中的#xxxxxx(任何位置((,并将它们转换为标记标记,标记标记将字符串从删除颜色的着色为字符串末尾的,直到找到新的十六进制代码(这将覆盖以前的颜色(。

示例

项目符号点表示代码块内的输入,然后是输出

  • Jo#ff0000hn

    Jo<span style="color:#ff0000">hn</span>
    
  • Ash#ffff00ley

    Ash<span style="color:#ffff00">ley</span>
    
  • D#00ffffarth#ffff00Vader

    D<span style="color:#00ffff">arth</span><span style="color:#ffff00">Vader</span>
    

    D<span style="color:#00ffff">arth<span style="color:#ffff00">Vader</span></span>
    
  • A #ff0000very #0000ffcomplex #0fc0fcexa#ff0000mple

    A <span style="color:#ff0000">very</span> <span style="color:#0000ff">complex</span> <span style="color:#0fc0fc">exa</span><span style="color:#ff0000">mple</span>
    

代码段

这就是它在HTML中的外观。

- Jo#ff0000hn<br>
Jo<span style="color:#ff0000">hn</span><br><br>
- Ash#00ff00ley<br>
Ash<span style="color:#00ff00">ley</span><br><br>
- D#00ffffarth#0000ffVader<br>
D<span style="color:#00ffff">arth</span><span style="color:#0000ff">Vader</span><br>
D<span style="color:#00ffff">arth<span style="color:#0000ff">Vader</span></span><br>
<i>Note: Both are same, the first one may be more syntactically correct.</i><br><br>
- A #ff0000very #0000ffcomplex #0fc0fcexa#ff0000mple<br>
A <span style="color:#ff0000">very</span> <span style="color:#0000ff">complex</span> <span style="color:#0fc0fc">exa</span><span style="color:#ff0000">mple</span><br>
<br>

测试

下面的两个代码都可以满足我的需求,但它们有一些问题:

  • 它们不适用于较短的语法(如#fff(
  • 连续的颜色只检测最后一种颜色(#ffffff#000000#ff0000只检测#ff0000(

PHP(感谢@Maxim Krizhanovsky(

function colorize($string) {
    return preg_replace('/(#[0-9a-f]{6})([a-z]+)/i', '<span style="color: $1;">$2</span>', $string);
}
echo colorize("Darth#ff0000Vader");

JavaScript

function colorize(string) {
    return string.replace(/(#[0-9a-f]{6})('w+)/gi, `<span style="color: $1;">$2</span>`)
}
console.log(colorize("Darth#ff0000Vader"));

您需要一个正则表达式,类似于:

$string = 'Jo#ff0000hn'; 
echo preg_replace('/(#[0-9a-f]{1,6})([a-z]+)/i', '<span style="color:$1">$2</span>', $string);

假设名称不包含标签,并且颜色总是格式化为#000000。

$name='Jo#ff0000hn';
$p=strpos($name,'#');
$color = substr($name,$p,7);
$newcolor='<span style="color:'.substr($name,$p,7).'">';
$name = str_replace($color,$newcolor,$name).'</span>';