Проверка ASCII символов

Библиотека Validator.js содержит набор методов для валидации строковых данных. Одной из базовых задач является определение, состоит ли строка исключительно из ASCII-символов. Для этого используется метод isAscii().


Что такое ASCII

ASCII (American Standard Code for Information Interchange) — стандарт кодирования символов, включающий 128 базовых символов:

  • латинские буквы A-Z, a-z
  • цифры 0-9
  • управляющие символы
  • пробел
  • знаки пунктуации
  • специальные символы

Таблица ASCII охватывает диапазон кодов:

0x00 - 0x7F

Примеры ASCII-символов:

Hello
12345
test@example.com
ABC_xyz-123

Примеры не-ASCII символов:

Привет
こんにちは
é
ä
©
?

Установка Validator.js

npm install validator

Подключение:

const validator = require('validator');

или:

import validator from 'validator';

Метод isAscii()

Синтаксис

validator.isAscii(str)

Параметры

Параметр Тип Описание
str string Проверяемая строка

Возвращаемое значение

Тип Описание
boolean true, если строка содержит только ASCII-символы

Базовые примеры

Проверка обычной строки

validator.isAscii('Hello');

Результат:

true

Проверка строки с цифрами и символами

validator.isAscii('user_123@example.com');

Результат:

true

Проверка кириллицы

validator.isAscii('Привет');

Результат:

false

Проверка Unicode-символов

validator.isAscii('café');

Результат:

false

Причина — символ é отсутствует в ASCII.


Проверка emoji

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

Проверка API-ключа

const apiKey = 'ABC123-XYZ789';

if (validator.isAscii(apiKey)) {
    console.log('Ключ валиден');
}

Проверка технических идентификаторов

const serviceName = 'payment-service-01';

console.log(validator.isAscii(serviceName));

Результат:

true

Практическое применение

Проверка системных имён

ASCII часто требуется для:

  • имён серверов
  • URL-идентификаторов
  • конфигурационных ключей
  • slug-строк
  • технических кодов
  • токенов
  • идентификаторов БД

Ограничение международных символов

Некоторые системы не поддерживают 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 }
]

Фильтрация ASCII-строк

const input = [
    'server01',
    'node_02',
    'сервер03',
    'db-main'
];

const filtered = input.filter(validator.isAscii);

console.log(filtered);

Результат:

[
    'server01',
    'node_02',
    'db-main'
]

Совмещение с другими валидаторами

ASCII + длина строки

const value = 'admin_01';

const valid =
    validator.isAscii(value) &&
    validator.isLength(value, { min: 3, max: 20 });

console.log(valid);

ASCII + alphanumeric

const value = 'Test123';

const valid =
    validator.isAscii(value) &&
    validator.isAlphanumeric(value);

console.log(valid);

ASCII + whitelist

const value = 'service-name-01';

const valid =
    validator.isAscii(value) &&
    validator.matches(value, /^[a-z0-9-]+$/i);

console.log(valid);

Отличие ASCII от Alphanumeric

isAscii()

Проверяет принадлежность к ASCII-таблице.

Допускаются:

A-Z
a-z
0-9
пробелы
символы
пунктуация
служебные символы

isAlphanumeric()

Разрешает только буквы и цифры.

validator.isAlphanumeric('abc123');

Результат:

true
validator.isAlphanumeric('abc-123');

Результат:

false

Проверка специальных символов

Допустимые ASCII-символы

validator.isAscii('!@#$%^&*()');

Результат:

true

Проверка escape-последовательностей

validator.isAscii('\\n\\t\\r');

Результат:

true

Внутренняя логика проверки

Упрощённый аналог метода:

function isAscii(str) {
    return /^[\x00-\x7F]+$/.test(str);
}

Однако реальная реализация библиотеки учитывает дополнительные нюансы обработки строк.


Проблемы Unicode и нормализации

Некоторые символы визуально похожи на ASCII, но ими не являются.

Пример:

const value = 'ABC';

Это full-width символы Unicode.

Проверка:

validator.isAscii(value);

Результат:

false

Работа с кодировками

ASCII является подмножеством:

  • UTF-8
  • UTF-16
  • Unicode

Поэтому ASCII-строки безопасно работают практически в любой современной кодировке.


Проверка данных формы

function validateForm(data) {
    return validator.isAscii(data.login) &&
           validator.isAscii(data.code);
}

Использование в Express.js

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');
});

Использование с middleware

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.


Невидимые Unicode-символы

const value = 'test​';

Строка визуально выглядит корректной, но содержит zero-width символ Unicode.

validator.isAscii(value);

Результат:

false

Проверка CSV-данных

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 и безопасность

Ограничение только ASCII-символами помогает:

  • избегать проблем кодировок
  • предотвращать Unicode spoofing
  • исключать визуально похожие символы
  • упрощать обработку данных
  • уменьшать риск ошибок сериализации

Unicode Spoofing

Опасный пример:

раypal.com

Некоторые символы могут быть кириллическими, визуально совпадающими с латиницей.

Проверка:

validator.isAscii('раypal.com');

Результат:

false

Сравнение с регулярными выражениями

Validator.js

validator.isAscii(value);

Преимущества:

  • читаемость
  • единый API
  • поддержка библиотеки
  • меньше вероятности ошибки

Регулярное выражение

/^[\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)
);

Метод эффективно работает даже с длинными строками.


Совместимость

Метод поддерживается:

  • Node.js
  • браузерами
  • Express.js
  • NestJS
  • React
  • Vue
  • Angular
  • серверными API
  • CLI-приложениями

Проверка ASCII-кодов вручную

function manualAsciiCheck(str) {

    for (let i = 0; i < str.length; i++) {

        if (str.charCodeAt(i) > 127) {
            return false;
        }

    }

    return true;
}

Сравнение:

Подход Преимущества
Validator.js Простота и читаемость
Ручная реализация Полный контроль
RegExp Компактность

Когда использовать isAscii()

Метод особенно полезен для:

  • логинов
  • системных идентификаторов
  • API-ключей
  • slug-полей
  • технических названий
  • legacy-интеграций
  • сетевых протоколов
  • конфигурационных файлов
  • служебных параметров
  • импортируемых данных