如何检查字符串是否为有效的十六进制颜色表示形式?
2022-08-30 02:24:25
例如:
AA33FF
= 有效的十六进制颜色
Z34FF9
= 无效的十六进制颜色(其中有 Z)
AA33FF11
= 无效的十六进制颜色(有额外的字符)
例如:
AA33FF
= 有效的十六进制颜色
Z34FF9
= 无效的十六进制颜色(其中有 Z)
AA33FF11
= 无效的十六进制颜色(有额外的字符)
/^#[0-9A-F]{6}$/i.test('#AABBCC')
详细说明:
^ ->
匹配开始
哈希
从 0 到 9 的任何整数和从 A 到 F
的任何字母,前一组正好出现 6 次
匹配结束
忽略大小写# ->
[0-9A-F] ->
{6} ->
$ ->
i ->
如果需要支持 3 个字符的十六进制代码,请使用以下命令:
/^#([0-9A-F]{3}){1,2}$/i.test('#ABC')
这里唯一的区别是
[0-9A-F]{6}
替换为
([0-9A-F]{3}){1,2}
这意味着它不会完全匹配 6 个字符,而是将恰好匹配 3 个字符,但只能匹配 1 或 2 次。允许 和 ,但不允许ABC
AABBCC
ABCD
组合解决方案:
var reg=/^#([0-9a-f]{3}){1,2}$/i;
console.log(reg.test('#ABC')); //true
console.log(reg.test('#AABBCC')); //true
// regular function
function isHexColor (hex) {
return typeof hex === 'string'
&& hex.length === 6
&& !isNaN(Number('0x' + hex))
}
// or as arrow function (ES6+)
isHexColor = hex => typeof hex === 'string' && hex.length === 6 && !isNaN(Number('0x' + hex))
console.log(isHexColor('AABBCC')) // true
console.log(isHexColor('AABBCC11')) // false
console.log(isHexColor('XXBBCC')) // false
console.log(isHexColor('AAXXCC')) // false
这个答案曾经抛出误报,因为它使用了 。
将从字符串的开头进行解析,直到它到达基数 () 中未包含的字符。这意味着它可以解析像“AAXXCC”这样的字符串,因为它以“AA”开头。Number('0x' + hex)
parseInt(hex, 16)
parseInt()
16
Number()
另一方面,仅当整个字符串与基数匹配时,才会进行解析。现在,不采用基数参数,但幸运的是,您可以在数字文本前面添加前缀以获取其他半径中的数字。Number()
以下是用于说明的表格:
╭─────────────┬────────────┬────────┬───────────────────╮
│ Radix │ Characters │ Prefix │ Will output 27 │
╞═════════════╪════════════╪════════╪═══════════════════╡
│ Binary │ 0-1 │ 0b │ Number('0b11011') │
│ Octal │ 0-7 │ 0o │ Number('0o33') │
│ Decimal │ 0-9 │ - │ - │
│ Hexadecimal │ 0-9A-F │ 0x │ Number('0x1b') │
╰─────────────┴────────────┴────────┴───────────────────╯