2010-05-12 61 views
2

我在查找验证html颜色代码的代码。想检查用户是否输入了有效的颜色代码,你可以帮助吗?验证html颜色代码JS

我知道我需要一个正则表达式的东西,但我无法理解一个想想正则表达式的东西:S

感谢

回答

3

可以匹配十六进制颜色是这样的:

if (/^#[0-9a-f]{3}([0-9a-f]{3})?$/i.test(str)) { 
    //Match 
} 

注意,这不会处理名称或rgb(n, n, n)

可以匹配rgb(x, y, z)颜色是这样的:

if (/^rgb\s*(\s*[012]?[0-9]{1,2}\s*,\s*[012]?[0-9]{1,2}\s*,\s*[012]?[0-9]{1,2}\s*)$/i.test(str)) { 
    //Match 
} 

注意,这将匹配rgb(299, 299, 299)

+0

它将处理#aaa其中,虽然是一个非常好的CSS颜色代码是(如RGB())不是有效的HTML颜色代码。 – Quentin 2010-05-12 14:24:21

+1

?? 3位数的颜色代码绝对有效。它们的含义与6位代码相同,每个颜色部分的第二位数字为“0”。 – Pointy 2010-05-12 14:27:28

+0

注意:你需要在第二个块的周围有一个(?:)分组(将字符串转换为if(/ ^#[0-9a-f] {3}(?:[0-9a-f]){3 })?$/i.test(str))' - 否则像'#aba'这样的颜色代码不匹配 – ABach 2010-05-12 14:27:49

2

你可以创建一个抽象元素,尝试将颜色应用于该元素:

function validate_color(c) { 
    var litmus = 'red'; 
    var d = document.createElement('div'); 
    d.style.color=litmus; 
    d.style.color=c; 
    //Element's style.color will be reverted to litmus or set to '' if an invalid color is given 
    if(c !== litmus && (d.style.color === litmus || d.style.color === '')){ 
     return false; 
    } 
    return true; 
} 
+0

这正是我需要它做的,谢谢!快速的问题....我找不到很多文件来设置style.color。虽然它似乎在我测试的所有浏览器中都能正常工作,但是在任何官方文档(无法将style.color设置为无效值)中的任何位置都有此行为?另外,我注意到它不介意右括号是否丢失,例如“rgba(11,11,11”是有效的。不是说这是一个问题,只是想知道为什么会这样? – Brandon 2017-09-30 23:22:49