十六进制颜色代码验证应使用正则表达式^#([0-9a-fa-f]{6}|[0-9a-fa-f]{3})$,确保以#开头、长度为3或6位、仅含合法十六进制字符,且需锚定首尾防止部分匹配。
十六进制颜色代码的标准格式是 #rrggbb 或简写为 #rgb(如 #ff0 或 #ff0000),验证时需确保字符合法、长度正确、且以 # 开头。
基础正则:匹配标准六位和三位格式
最常用且稳妥的正则表达式是:
^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$-
^ 表示字符串开头,$ 表示结尾,避免匹配到中间片段(如
abc#123def) -
[0-9A-Fa-f]匹配任意十六进制字符(数字 0–9 和字母 a–f、A–F) -
{3}和{6}分别限定三位或六位长度 -
|表示“或”,支持#fff和#ffffff两种写法
增强版:支持可选空格与大小写统一处理
实际输入中用户可能加空格或混用大小写。可在校验前先 trim,或在正则中放宽边界:
^\s*#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})\s*$-
\s*允许开头和结尾有零个或多个空白字符(空格、制表符等) - 仍保持核心逻辑不变,不引入无效字符
- 建议在业务逻辑中统一转为小写再校验,便于后续存储或比较
注意避开常见陷阱
以下写法看似合理,但存在隐患:
-
#[0-9A-Fa-f]{3,6}—— 会错误接受#1234(四位)或#1234567(七位) -
^#[0-9A-Fa-f]+$—— 允许任意长度(如#1或#123456789),不符合 CSS 规范 - 忽略大小写标志(如 JavaScript 的
i标志)虽方便,但需确认目标环境是否支持;更稳妥的是显式写A-Fa-f
各语言简例(直接可用)
JavaScript:
/^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$/.test("#ff0") // truePython:
import re<br>pattern = r"^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$"<br>re.match(pattern, "#FF0000") is not None # TrueJava(使用 Pattern):
String regex = "^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$";<br>Pattern.matches(regex, "#abc"); // true











