将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff
- rgb 中每个 , 后面的空格数量不固定
- 十六进制表达式使用六位小写字母
- 如果输入不符合 rgb 格式,返回原始输入
function rgb2hex(sRGB) {
return sRGB.replace(/^rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)$/,function(num,num1,num2,num3){
//考虑越界问题
if (num1<0 || num1>255 || num2<0 || num2>255 || num3<0 || num3>255) {
return num;
}
else{
function rgb(s){
if (s<16) {
//位数不够时补0
return '0'+parseInt(s).toString(16);
}
else{
return parseInt(s).toString(16);
}
}
return '#'+rgb(num1)+rgb(num2)+rgb(num3);
}
});
}
alert(rgb2hex('rgb(255, 255, 255)')); //'#ffffff'
十六进制转RGB数字格式
function hextorgb(str) {
var newstr = str.slice(1).split('');
var hexnum = [];
var numarr = newstr.map(function(item,index,array){
var x=0;
switch(item){
case 'a': x = 10;
break;
case 'b': x = 11;
break;
case 'c': x = 12;
break;
case 'd': x = 13;
break;
case 'e': x = 14;
break;
case 'f': x = 15;
break;
default:
x = item;
}
return x;
});
for(var i=0; i<numarr.length;){
//去掉字符 ’#’
var y = numarr[i]*Math.pow(16,1) + numarr[i+1]
if (y<100) {
y = '0'+y ; //位数不够补0
}
hexnum.push(y);
i +=2;
}
return('rgb(' + hexnum.join(',') + ')');
}
alert(hextorgb('#0bffff'));