Проверка длины строки
Проверьте длину строки в символах, кодовых точках Unicode, 16-битных единицах кода UTF-16 и байтах UTF-8. Задайте минимальную и максимальную длину, чтобы узнать, соответствует ли им строка, и получите усечённую копию, в которой эмодзи никогда не разделяются пополам. Работает в браузере.
Ввод
Вывод
Документация
Что такое длина строки?
Длина строки зависит от того, что именно считать. Пользователь видит символы, а программы считают кодовые точки, 16-битные единицы кода UTF-16 или байты, и эти значения часто различаются. Эмодзи 👍🏽 выглядит как один символ, но состоит из 2 кодовых точек, 4 единиц кода UTF-16 и 8 байт UTF-8. JavaScript, Java и C# возвращают количество единиц кода UTF-16, базы данных часто ограничивают количество байт, а поля форм могут считать переводы строк как два символа.
Описание инструмента
Этот инструмент одновременно показывает длину строки в четырех единицах и проверяет ее на соответствие минимальной и максимальной длине. Используйте его, чтобы узнать, помещаются ли имя пользователя, заголовок или значение базы данных в заданное ограничение, или понять, почему две программы сообщают разную длину одного и того же текста. Если строка слишком длинная, вы получите усеченную копию, соответствующую ограничению и не разрезанную посередине символа.
Возможности
- Подсчитывает символы, кодовые точки Unicode, единицы кода UTF-16 и байты UTF-8
- Проверяет длину на соответствие необязательным минимальному и максимальному значениям в выбранной единице измерения
- Показывает, сколько единиц осталось до ограничения, не хватает или превышает его
- Усечет слишком длинную строку, не разделяя эмодзи, флаги или буквы с диакритическими знаками
- Может игнорировать начальные и конечные пробельные символы
- Может считать переводы строк как CR LF, как это делают HTML-формы при отправке данных
Как это работает
Символы — это графемные кластеры, то есть единицы, которые человек воспринимает как один символ; они определяются с помощью встроенного в браузер сегментирования текста Unicode. Кодовые точки — это значения Unicode в строке. Единицы кода UTF-16 — это то, что возвращает String.length в JavaScript: символы за пределами базовой многоязычной плоскости, например большинство эмодзи, занимают две единицы. Байты UTF-8 — это размер строки в кодировке UTF-8. При усечении сохраняются целые символы, пока добавление следующего не приведет к превышению максимального значения.
Советы
- Для ограничения
VARCHARв MySQL илиvarcharв PostgreSQL проверяйте длину по кодовым точкам Unicode. Для ограничения в байтах, например для ключа индекса или поля сетевого протокола, проверяйте длину в байтах UTF-8. - Атрибут
maxlengthу HTML-поля ввода считает единицы кода UTF-16, поэтому один эмодзи может занимать две единицы. - Браузеры отправляют переводы строк в
textareaкак CR LF, поэтому сервер, проверяющий длину, может считать каждый перевод строки дважды. Включите параметр CR LF, чтобы использовать тот же способ подсчета.