HEX-цвет — один из самых распространённых способов представления цвета в веб-разработке. Формат активно используется в CSS, SVG, Canvas API, дизайн-системах и пользовательских интерфейсах.
Библиотека Validator.js предоставляет встроенный метод для проверки
корректности HEX-значений — isHexColor().
isHexColor()Метод проверяет, является ли строка корректным HEX-цветом.
validator.isHexColor(str)
const validator = require('validator');
import validator from 'validator';
import validator from 'validator';
console.log(validator.isHexColor('#ffffff'));
console.log(validator.isHexColor('#000000'));
console.log(validator.isHexColor('#ff5733'));
Результат:
true
true
true
Validator.js поддерживает стандартные CSS HEX-форматы.
validator.isHexColor('#aabbcc');
true
validator.isHexColor('#abc');
true
validator.isHexColor('#aabbccdd');
true
validator.isHexColor('#abcd');
true
#validator.isHexColor('ffffff');
false
validator.isHexColor('#zzzzzz');
false
validator.isHexColor('#12');
validator.isHexColor('#12345');
validator.isHexColor('#1234567');
false
false
false
validator.isHexColor('');
false
validator.isHexColor('rgb(255,0,0)');
validator.isHexColor('blue');
validator.isHexColor('hsl(120, 50%, 50%)');
false
false
false
Validator.js корректно обрабатывает как нижний, так и верхний регистр.
validator.isHexColor('#AABBCC');
validator.isHexColor('#ffaa00');
validator.isHexColor('#FfAa11');
true
true
true
import validator from 'validator';
function validateColor(color) {
if (validator.isHexColor(color)) {
return 'Корректный цвет';
}
return 'Некорректный HEX';
}
console.log(validateColor('#3498db'));
console.log(validateColor('3498db'));
Результат:
Корректный цвет
Некорректный HEX
import express from 'express';
import validator from 'validator';
const app = express();
app.use(express.json());
app.post('/theme', (req, res) => {
const { primaryColor } = req.body;
if (!validator.isHexColor(primaryColor)) {
return res.status(400).json({
error: 'Некорректный HEX-цвет'
});
}
res.json({
success: true
});
});
const colors = [
'#ffffff',
'#123abc',
'#zzz999',
'#000'
];
const validColors = colors.filter(color =>
validator.isHexColor(color)
);
console.log(validColors);
Результат:
[ '#ffffff', '#123abc', '#000' ]
function saveTheme(color) {
if (!validator.isHexColor(color)) {
throw new Error('Неверный цвет');
}
return {
themeColor: color
};
}
console.log(saveTheme('#ff9900'));
import { useState } from 'react';
import validator from 'validator';
function App() {
const [color, setColor] = useState('');
const [isValid, setIsValid] = useState(true);
function handleChange(event) {
const value = event.target.value;
setColor(value);
setIsValid(validator.isHexColor(value));
}
return (
<div>
<input
value={color}
onCha nge={handleChange}
placeholder="#ff0000"
/>
{!isValid && (
<p>Некорректный HEX-цвет</p>
)}
</div>
);
}
Иногда требуется принимать как HEX, так и RGB.
function validateColor(color) {
return (
validator.isHexColor(color) ||
validator.isRGBColor(color)
);
}
console.log(validateColor('#ffffff'));
console.log(validateColor('rgb(255,255,255)'));
true
true
Перед проверкой часто выполняется очистка строки.
const color = ' #ff00aa '.trim();
console.log(validator.isHexColor(color));
true
const color = '#FFAABB'.toLowerCase();
console.log(validator.isHexColor(color));
true
const styles = {
background: '#282c34',
text: '#ffffff',
border: '#12xz99'
};
for (const [key, value] of Object.entries(styles)) {
console.log(
key,
validator.isHexColor(value)
);
}
Результат:
background true
text true
border false
Метод использует регулярное выражение для проверки:
наличия символа #;
допустимой длины;
наличия только шестнадцатеричных символов:
0-9a-fA-FПоддерживаются следующие длины:
| Формат | Пример |
|---|---|
#RGB |
#fff |
#RGBA |
#ffff |
#RRGGBB |
#ffffff |
#RRGGBBAA |
#ffffffff |
Часто HEX-цвет проверяют вручную:
const regex = /^#([0-9A-F]{3}|[0-9A-F]{6})$/i;
Однако Validator.js:
function isHex(color) {
return /^#([0-9A-F]{3}|[0-9A-F]{6})$/i.test(color);
}
validator.isHexColor(color);
Второй вариант проще поддерживать в крупных проектах.
#validator.isHexColor('ff00aa');
false
HEX-цвет обязан начинаться с #.
validator.isHexColor('#12GG99');
false
Символы G-Z не входят в шестнадцатеричный диапазон.
validator.isHexColor(123456);
Это приведёт к ошибке, так как метод ожидает строку.
Корректный вариант:
validator.isHexColor(String(123456));
const config = {
success: '#28a745',
danger: '#dc3545',
warning: '#ffc107'
};
const invalid = Object.values(config).some(color =>
!validator.isHexColor(color)
);
console.log(invalid);
false
function createTheme(theme) {
const requiredFields = [
'primary',
'secondary',
'background'
];
for (const field of requiredFields) {
if (!validator.isHexColor(theme[field])) {
throw new Error(`Поле ${field} содержит неверный цвет`);
}
}
return theme;
}
import validator from 'validator';
function isValidHex(color: string): boolean {
return validator.isHexColor(color);
}
const cssVariables = {
'--main-color': '#3498db',
'--accent-color': '#e74c3c',
'--bad-color': '#xx99ff'
};
for (const variable in cssVariables) {
const value = cssVariables[variable];
if (!validator.isHexColor(value)) {
console.log(`Ошибка в ${variable}`);
}
}
Результат:
Ошибка в --bad-color
function addColor(colors, newColor) {
if (!validator.isHexColor(newColor)) {
throw new Error('Некорректный HEX');
}
colors.push(newColor);
}
const palette = [];
addColor(palette, '#ff0000');
addColor(palette, '#00ff00');
console.log(palette);
function sanitizeColor(input) {
const color = input.trim();
if (!validator.isHexColor(color)) {
return null;
}
return color.toLowerCase();
}
console.log(sanitizeColor(' #FFAABB '));
Результат:
#ffaabb