JavaScript - 在Opera中验证十六进制?

时间:2010-10-26 08:33:39

标签: javascript regex

此功能适用于Firefox,Chrome,IE9。在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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

此正则表达式不正确。这个正则表达式中#1234也是正确的。使用正则表达式/^#([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/

答案 1 :(得分: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,因为它包含正则表达式对象,而不是字符串。如果使用匈牙利表示法来指定数据类型,则前缀为匹配实际的数据类型,或者它只是反作用。)