2010-05-12 63 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