Библиотека Validator.js содержит набор методов для валидации
строковых данных. Одной из базовых задач является определение, состоит
ли строка исключительно из ASCII-символов. Для этого используется метод
isAscii().
ASCII (American Standard Code for Information Interchange) — стандарт кодирования символов, включающий 128 базовых символов:
A-Z, a-z0-9Таблица ASCII охватывает диапазон кодов:
0x00 - 0x7F
Примеры ASCII-символов:
Hello
12345
test@example.com
ABC_xyz-123
Примеры не-ASCII символов:
Привет
こんにちは
é
ä
©
?
npm install validator
Подключение:
const validator = require('validator');
или:
import validator from 'validator';
validator.isAscii(str)
| Параметр | Тип | Описание |
|---|---|---|
str |
string |
Проверяемая строка |
| Тип | Описание |
|---|---|
boolean |
true, если строка содержит только ASCII-символы |
validator.isAscii('Hello');
Результат:
true
validator.isAscii('user_123@example.com');
Результат:
true
validator.isAscii('Привет');
Результат:
false
validator.isAscii('café');
Результат:
false
Причина — символ é отсутствует в ASCII.
validator.isAscii('Hello ?');
Результат:
false
Метод анализирует каждый символ строки и проверяет, входит ли его код в диапазон ASCII:
0–127
Если хотя бы один символ выходит за пределы диапазона — возвращается
false.
validator.isAscii('');
Результат:
true
Пустая строка считается корректной, поскольку не содержит запрещённых символов.
ASCII включает:
Пример:
validator.isAscii('Hello\nWorld');
Результат:
true
function validateUsername(username) {
return validator.isAscii(username);
}
console.log(validateUsername('admin_123'));
console.log(validateUsername('админ'));
Результат:
true
false
const apiKey = 'ABC123-XYZ789';
if (validator.isAscii(apiKey)) {
console.log('Ключ валиден');
}
const serviceName = 'payment-service-01';
console.log(validator.isAscii(serviceName));
Результат:
true
ASCII часто требуется для:
Некоторые системы не поддерживают Unicode:
const filename = 'report_2026.txt';
if (!validator.isAscii(filename)) {
throw new Error('Недопустимые символы');
}
Legacy-системы могут некорректно обрабатывать Unicode:
const legacyCode = 'SYSTEM_001';
validator.isAscii(legacyCode);
const values = [
'alpha',
'beta123',
'тест',
'gamma'
];
const results = values.map(value => ({
value,
valid: validator.isAscii(value)
}));
console.log(results);
Результат:
[
{ value: 'alpha', valid: true },
{ value: 'beta123', valid: true },
{ value: 'тест', valid: false },
{ value: 'gamma', valid: true }
]
const input = [
'server01',
'node_02',
'сервер03',
'db-main'
];
const filtered = input.filter(validator.isAscii);
console.log(filtered);
Результат:
[
'server01',
'node_02',
'db-main'
]
const value = 'admin_01';
const valid =
validator.isAscii(value) &&
validator.isLength(value, { min: 3, max: 20 });
console.log(valid);
const value = 'Test123';
const valid =
validator.isAscii(value) &&
validator.isAlphanumeric(value);
console.log(valid);
const value = 'service-name-01';
const valid =
validator.isAscii(value) &&
validator.matches(value, /^[a-z0-9-]+$/i);
console.log(valid);
Проверяет принадлежность к ASCII-таблице.
Допускаются:
A-Z
a-z
0-9
пробелы
символы
пунктуация
служебные символы
Разрешает только буквы и цифры.
validator.isAlphanumeric('abc123');
Результат:
true
validator.isAlphanumeric('abc-123');
Результат:
false
validator.isAscii('!@#$%^&*()');
Результат:
true
validator.isAscii('\\n\\t\\r');
Результат:
true
Упрощённый аналог метода:
function isAscii(str) {
return /^[\x00-\x7F]+$/.test(str);
}
Однако реальная реализация библиотеки учитывает дополнительные нюансы обработки строк.
Некоторые символы визуально похожи на ASCII, но ими не являются.
Пример:
const value = 'ABC';
Это full-width символы Unicode.
Проверка:
validator.isAscii(value);
Результат:
false
ASCII является подмножеством:
Поэтому ASCII-строки безопасно работают практически в любой современной кодировке.
function validateForm(data) {
return validator.isAscii(data.login) &&
validator.isAscii(data.code);
}
app.post('/register', (req, res) => {
const { username } = req.body;
if (!validator.isAscii(username)) {
return res.status(400).json({
error: 'Only ASCII characters allowed'
});
}
res.send('OK');
});
function asciiOnly(field) {
return (req, res, next) => {
if (!validator.isAscii(req.body[field])) {
return res.status(400).send('Invalid characters');
}
next();
};
}
Метод isAscii():
validator.isAscii(123);
Может привести к ошибке, поскольку ожидается строка.
Корректный вариант:
validator.isAscii(String(123));
validator.isAscii('hello world');
Результат:
true
Пробел входит в ASCII.
const value = 'test';
Строка визуально выглядит корректной, но содержит zero-width символ Unicode.
validator.isAscii(value);
Результат:
false
const rows = [
'user1,data1',
'user2,data2',
'пользователь,data3'
];
const validRows = rows.filter(validator.isAscii);
console.log(validRows);
const configKey = 'MAX_CONNECTIONS';
if (!validator.isAscii(configKey)) {
throw new Error('Invalid config key');
}
const envName = process.env.NODE_ENV;
console.log(
validator.isAscii(envName)
);
Ограничение только ASCII-символами помогает:
Опасный пример:
раypal.com
Некоторые символы могут быть кириллическими, визуально совпадающими с латиницей.
Проверка:
validator.isAscii('раypal.com');
Результат:
false
validator.isAscii(value);
Преимущества:
/^[\x00-\x7F]+$/.test(value)
Преимущества:
Недостатки:
describe('ASCII validation', () => {
test('valid ASCII string', () => {
expect(
validator.isAscii('Hello123')
).toBe(true);
});
test('unicode string', () => {
expect(
validator.isAscii('Привет')
).toBe(false);
});
});
const largeText = 'A'.repeat(100000);
console.log(
validator.isAscii(largeText)
);
Метод эффективно работает даже с длинными строками.
Метод поддерживается:
function manualAsciiCheck(str) {
for (let i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 127) {
return false;
}
}
return true;
}
Сравнение:
| Подход | Преимущества |
|---|---|
| Validator.js | Простота и читаемость |
| Ручная реализация | Полный контроль |
| RegExp | Компактность |
Метод особенно полезен для: