JavaScript-在Opera中验证十六进制?
该功能适用于Firefox、Chrome和IE9。在歌剧中不起作用JavaScript-在Opera中验证十六进制?,javascript,regex,Javascript,Regex,该功能适用于Firefox、Chrome和IE9。在歌剧中不起作用 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 测试 #0
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
有什么想法吗?这个正则表达式不正确<在这个正则表达式中,code>#1234也是正确的。使用正则表达式([a-fA-F0-9]{3}{124;[a-fA-F0-9]{6})$/如果交换乘法器,它也可以在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
,因为它包含正则表达式对象,而不是字符串。如果使用匈牙利符号指定数据类型,则前缀必须与实际数据类型匹配,否则只能是相反的。)请注意,对于该任务,正则表达式已经是错误的,因为它也将匹配#123a
。你可能想要^#([0-9a-f]{3}{1.2}$
。这并不能真正解决Opera中正在发生的事情,因此,应该是一个评论(而且已经有了)@David Hedlund抱歉,误解了这个问题,你的regexp不也会匹配#QQ吗?这让我很想知道为什么一个在Opera中工作,而另一个不在Opera中工作。