如何检查字符串是否为有效的十六进制颜色表示形式?

2022-08-30 02:24:25

例如:

AA33FF= 有效的十六进制颜色

Z34FF9= 无效的十六进制颜色(其中有 Z)

AA33FF11= 无效的十六进制颜色(有额外的字符)


答案 1
/^#[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 次。允许 和 ,但不允许ABCAABBCCABCD

组合解决方案:

var reg=/^#([0-9a-f]{3}){1,2}$/i;
console.log(reg.test('#ABC')); //true
console.log(reg.test('#AABBCC')); //true

答案 2

// 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')    │
╰─────────────┴────────────┴────────┴───────────────────╯