Если вы хотите сравнить два цветовых значения, каждое из которых может быть представлено несколькими различными способами, то вы должны убедиться, что оба они преобразованы в каноническую форму (например, точно такую же форму).
Таким образом, вы можете использовать rgb(x,y,z)
в качестве канонической формы, если хотите, но вы должны будете убедиться, что любые значения цвета, выраженные как #xyz
или #xxyyzz
, сначала преобразуются в форму rgb перед сравнением.
Вот функция, которая преобразует все три значения цветов в rgb(x,y,z)
без пробелов, а затем сравнивает их и возвращает вам результат:
function colorsAreSame(c1, c2) {
var space = /\s+/g;
function makeRGB(c) {
var r, g, b;
c = c.replace(space, "");
if (c.charAt(0) == "#") {
if (c.length == 4) {
r = parseInt(c.charAt(1), 16);
r = (r * 16) + r;
g = parseInt(c.charAt(2), 16);
g = (g * 16) + g;
b = parseInt(c.charAt(3), 16);
b = (b * 16) + b;
} else if (c.length == 7) {
r = parseInt(c.substr(1, 2), 16);
g = parseInt(c.substr(3, 2), 16);
b = parseInt(c.substr(5, 2), 16);
}
return "rgb(" + r + "," + g + "," + b + ")";
} else {
return(c);
}
}
c1 = makeRGB(c1);
c2 = makeRGB(c2);
return(c1 == c2);
}