验证CSS颜色名称

我已经写了接受CSS颜色的某些参数的jQuery插件。

我想验证他们。 如果这只是一个十六进制或RGB值我能做到这正则表达式,但我如何验证无腹胀插件的所有147有效的颜色名称?

我在想,如果有尝试应用样式(使用jQuery也许),然后从浏览器中捕获一个错误,如果它是无效的一些方法?

编辑:powtac和潘泰利斯想出了一个解决方案,但他们都错过了边缘情况,所以我在这里,包括一个完整的解决方案:

var validateCssColour = function(colour){ var rgb = $('<div style="color:#28e32a">'); // Use a non standard dummy colour to ease checking for edge cases var valid_rgb = "rgb(40, 227, 42)"; rgb.css("color", colour); if(rgb.css('color') == valid_rgb && colour != ':#28e32a' && colour.replace(/ /g,"") != valid_rgb.replace(/ /g,"")) return false; else return true; };

--------------解决方案-------------

你可以简单地将颜色设置为一个虚拟的元素,然后检查元素的值是白色以外的东西。

colorToTest = 'lime'; // 'lightgray' does not work for IE

$('#dummy').css('backgroundColor', 'white');
$('#dummy').css('backgroundColor', colorToTest);
if ($('#dummy').css('backgroundColor') != 'rgb(255, 255, 255)' || colorToTest == 'white') {
alert(colorToTest+' is valid');
}

在这里,http://jsfiddle.net/vSXNK/

这是匆匆写成,但它的工作原理。

所有张贴此页面上的解决方案是不正确的,当有问题的字符串的颜色与试色相同。 当然,你可以使用颜色的不太可能的选择,但我宁愿去100%的成功率。

OP在他的代码(见结肠条件)单错字,不测试“#28e32a”,这样颜色会失败,并且正则表达式将颜色内压缩空白,所以“#28E 32A”会(不正确)通过。

在正常的JavaScript,这应该有100%的成功:

function validTextColour(stringToTest) {
//Alter the following conditions according to your need.
if (stringToTest === "") { return false; }
if (stringToTest === "inherit") { return false; }
if (stringToTest === "transparent") { return false; }

var image = document.createElement("img");
image.style.color = "rgb(0, 0, 0)";
image.style.color = stringToTest;
if (image.style.color !== "rgb(0, 0, 0)") { return true; }
image.style.color = "rgb(255, 255, 255)";
image.style.color = stringToTest;
return image.style.color !== "rgb(255, 255, 255)";
}

的jsfiddle:http://jsfiddle.net/WK_of_Angmar/xgA5C/

我想你可以使用该脚本从这个页面,不正是你想要什么:你传递一个字符串,并试图找出颜色。 好吧,这不是正是你想要做什么,但它应该工作。

我认为,在某些时候任何情况下,你应该做一个名称查找(我不认为有一些神奇的方法来确定从字符串“淡蓝色”的十六进制值),所以只是抢夺了一些别人已经做过的工作(剧本是斯托扬斯特凡这是在JavaScript的非常好,我读过从他身上一些好书,如果他做了查询,好了,我不认为还有其他解决方案)

分类:JavaScript的 时间:2012-07-27 人气:0
本文关键词: 的JavaScript,CSS和jQuery
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.403 (s). 9 q(s)