Библиотека Validator.js содержит функцию isHSL(),
предназначенную для проверки строк, представляющих цвет в формате
HSL.
HSL — это цветовая модель, основанная на трёх компонентах:
H — оттенок (Hue)S — насыщенность (Saturation)L — светлота (Lightness)Формат широко используется в CSS и графических интерфейсах благодаря удобству настройки цветов.
Через npm:
npm install validator
Подключение:
const validator = require('validator');
Для ES-модулей:
import validator from 'validator';
validator.isHSL(str)
| Параметр | Тип | Описание |
|---|---|---|
str |
string |
Проверяемая строка |
true | false
validator.isHSL('hsl(120, 100%, 50%)');
Результат:
true
Функция ожидает строку в CSS-формате:
hsl(H, S%, L%)
Где:
| Компонент | Диапазон |
|---|---|
H |
от 0 до 360 |
S |
от 0% до 100% |
L |
от 0% до 100% |
validator.isHSL('hsl(0, 100%, 50%)');
validator.isHSL('hsl(120, 100%, 50%)');
validator.isHSL('hsl(240, 100%, 50%)');
Все вызовы вернут:
true
validator.isHSL('hsl(0, 0%, 0%)');
validator.isHSL('hsl(360, 100%, 100%)');
Результат:
true
validator.isHSL('hsl(180, 50%, 50%)');
validator.isHSL('hsl(180,50%,50%)');
Обе строки валидны:
true
validator.isHSL('hsl(120, 50, 50)');
Результат:
false
Причина: насыщенность и светлота обязательно должны содержать
%.
validator.isHSL('hsl(400, 50%, 50%)');
validator.isHSL('hsl(120, 150%, 50%)');
validator.isHSL('hsl(120, 50%, 150%)');
Результат:
false
validator.isHSL('120, 50%, 50%');
Результат:
false
validator.isHSL('hsl(120 50% 50%)');
validator.isHSL('hsl()');
validator.isHSL('rgb(255, 0, 0)');
Результат:
false
const color = 'hsl(200, 80%, 40%)';
if (validator.isHSL(color)) {
console.log('Корректный HSL');
} else {
console.log('Ошибка формата');
}
const colors = [
'hsl(0, 100%, 50%)',
'hsl(120, 50%, 50%)',
'hsl(400, 50%, 50%)',
'rgb(255,0,0)'
];
const validColors = colors.filter(color =>
validator.isHSL(color)
);
console.log(validColors);
Результат:
[
'hsl(0, 100%, 50%)',
'hsl(120, 50%, 50%)'
]
import express from 'express';
import validator from 'validator';
const app = express();
app.use(express.json());
app.post('/theme', (req, res) => {
const { accentColor } = req.body;
if (!validator.isHSL(accentColor)) {
return res.status(400).json({
error: 'Некорректный HSL-цвет'
});
}
res.json({
success: true
});
});
const theme = {
primary: 'hsl(210, 80%, 50%)',
secondary: 'hsl(340, 70%, 45%)',
danger: 'hsl(0, 100%, 50%)'
};
for (const color of Object.values(theme)) {
if (!validator.isHSL(color)) {
throw new Error(`Некорректный цвет: ${color}`);
}
}
Метод анализирует:
hsl(...)Функция не преобразует цвет и не вычисляет его визуальное представление.
Даже небольшое отклонение приводит к ошибке:
validator.isHSL(' hsl(120, 50%, 50%) ');
Результат может быть:
false
Из-за лишних пробелов по краям строки.
Практически всегда рекомендуется использовать
trim():
const color = input.trim();
validator.isHSL(color);
В библиотеке присутствуют и другие методы проверки цветов:
| Метод | Формат |
|---|---|
isHexColor() |
HEX |
isRGBColor() |
RGB |
isHSL() |
HSL |
function isValidCssColor(color) {
return (
validator.isHexColor(color) ||
validator.isRGBColor(color) ||
validator.isHSL(color)
);
}
function applyThemeColor(color) {
if (!validator.isHSL(color)) {
throw new Error('Недопустимый цвет');
}
document.documentElement.style.setProperty(
'--accent-color',
color
);
}
const config = {
background: 'hsl(220, 20%, 15%)',
text: 'hsl(0, 0%, 95%)'
};
Object.entries(config).forEach(([key, value]) => {
if (!validator.isHSL(value)) {
console.error(`Ошибка в поле ${key}`);
}
});
| Строка | Результат |
|---|---|
hsl(120, 50%, 50%) |
true |
hsl(360, 100%, 100%) |
true |
hsl(400, 50%, 50%) |
false |
hsl(120, 150%, 50%) |
false |
hsl(120, 50, 50) |
false |
rgb(255,0,0) |
false |
#ff0000 |
false |
validator.isHSL(12345);
Результат:
false
validator.isHSL('hsl(100, 50, 50)');
Ошибка связана с неверным CSS-синтаксисом.
validator.isHSL('hsl(-10, 50%, 50%)');
Результат:
false
function saveTheme(settings) {
const { primaryColor } = settings;
if (!validator.isHSL(primaryColor)) {
return {
success: false,
error: 'Некорректный цвет темы'
};
}
return {
success: true
};
}
const palette = [
'hsl(10, 80%, 50%)',
'hsl(40, 90%, 60%)',
'hsl(500, 20%, 20%)'
];
const errors = [];
palette.forEach(color => {
if (!validator.isHSL(color)) {
errors.push(color);
}
});
console.log(errors);
Результат:
[
'hsl(500, 20%, 20%)'
]
isHSL() использует регулярные выражения и строковый
анализ. Проверка выполняется быстро и подходит для:
const normalized = color.trim().toLowerCase();
function validateHSL(color) {
return validator.isHSL(
color.trim()
);
}
function validateThemeColor(color) {
if (!validator.isHSL(color)) {
return false;
}
return !color.includes('0%, 0%');
}
async function saveColor(color) {
if (!validator.isHSL(color)) {
throw new Error('Некорректный формат');
}
await db.colors.insert({
value: color
});
}
import validator from 'validator';
import { useState } from 'react';
function ColorInput() {
const [color, setColor] = useState('');
const [error, setError] = useState('');
function handleChange(e) {
const value = e.target.value;
setColor(value);
if (!validator.isHSL(value)) {
setError('Некорректный HSL');
} else {
setError('');
}
}
return (
<div>
<input
value={color}
onCha nge={handleChange}
/>
{error && <p>{error}</p>}
</div>
);
}