2010-10-26 65 views
3

此功能適用於Firefox,Chrome,IE9。在Opera中不起作用。JavaScript - 在Opera中驗證十六進制?

function isValidHex(hex) { alert(hex); 
    var strPattern = /^#([0-9a-f]{1,2}){3}$/i; alert(strPattern.test(hex)); 
    return strPattern.test(hex); 
} 

進去的十六進制是一樣的。 strPatter.test的結果在Opera中返回false,在Firefox中返回true。

經過測試。

#000000 
#ffffff 

任何想法?

+1

請注意,該正則表達式已經錯誤,因爲它也會匹配'#123a'。你可能需要'^#([0-9a-f] {3}){1.2} $'。 – Joey 2010-10-26 08:36:26

回答

2

這個正則表達式是不正確的。在這個正則表達式中,#1234也是正確的。用戶正則表達式/^#([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/

+2

這並沒有真正解決Opera中發生的問題,因此,可能應該是一個評論(並且已經有一個) – 2010-10-26 08:41:18

+0

但是這並不能解釋爲什麼它在Opera中不起作用... – 2010-10-26 08:41:31

+0

@ David Hedlund對不起,解釋了這個問題 – joni 2010-10-26 08:44:55

2

如果換周圍的乘數,它工作在Opera還有:

function isValidHex(hex) { 
    var objPattern = /^#([0-9a-f]{3}){1,2}$/i; 
    return objPattern.test(hex); 
} 

你會想這樣做,無論如何,讓你匹配的三位數字(即3或3 + 3的一個或兩個組字符),而不是三組一到兩位數字(即1 + 1 + 1,2 + 1 + 1,2 + 2 + 1或2 + 2 + 2個字符)。 (請注意,我也將變量從strPattern更名爲objPattern,因爲它包含正則表達式對象,而不是字符串。如果使用匈牙利符號指定數據類型,則前綴必須與實際數據類型相匹配,或者它只是合乎情理)

+0

這讓我很想知道爲什麼一個在Opera中工作而另一個不在。 – Joey 2010-10-26 08:58:05