- JavaScript String charCodeAt()
- See Also:
- charCodeAt() vs codePointAt()
- Syntax
- Parameters
- Return Value
- More Examples
- Related Pages
- Browser Support
- String.prototype.charCodeAt()
- Синтаксис
- Параметры
- Описание
- Примеры
- Пример: использование метода charCodeAt()
- Пример: исправление метода charCodeAt() для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке неизвестно
- Пример: исправление метода charCodeAt() для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке известно
- Спецификации
- Совместимость с браузерами
- Смотрите также
- JavaScript | Как получить символ по символьному коду?
- Как конвертировать один символьный код в символьную строку при помощи JavaScript?
- Зачем искать по символьному коду? Применение на практике
- Почему лучше всего искать по символьному коду?
- Методы charAt и charCodeAt — Возвращаем символ и КОД символа
- Метод charAt — Возвращаем символ строки
- Метод charCodeAt — Возвращаем КОД символа строки
- Юникод U+ и HTML-код символов — Коды букв русского алфавита
- Методы charAt и charCodeAt — Рассмотрим реальный пример
JavaScript String charCodeAt()
The charCodeAt() method returns the Unicode of the character at a specified index (position) in a string.
The index of the first character is 0, the second is 1, .
The index of the last character is string length — 1 (See Examples below).
See Also:
charCodeAt() vs codePointAt()
charCodeAt() is UTF-16, codePointAt() is Unicode.
charCodeAt() returns a number between 0 and 65535.
Both methods return an integer representing the UTF-16 code of a character, but only codePointAt() can return the full value of a Unicode value greather 0xFFFF (65535).
For more information about Unicode Character Sets, visit our Unicode Reference.
Syntax
Parameters
Return Value
Type | Description |
A number | The Unicode of the character at the specified index. NaN if the index is invalid. |
More Examples
Get the Unicode of the last character in a string:
Get the Unicode of the 15th character:
Related Pages
Browser Support
charCodeAt() is an ECMAScript1 (ES1) feature.
ES1 (JavaScript 1997) is fully supported in all browsers:
Chrome | Edge | Firefox | Safari | Opera | IE |
Yes | Yes | Yes | Yes | Yes | Yes |
String.prototype.charCodeAt()
Метод charCodeAt() возвращает числовое значение Юникода для символа по указанному индексу (за исключением кодовых точек Юникода, больших 0x10000).
Синтаксис
Параметры
Целое число больше, либо равное 0 и меньше длины строки; если параметр не является числом, он устанавливается в 0.
Описание
Кодовые точки Юникода простираются в диапазоне от 0 до 1114111 (0x10FFFF). Первые 128 кодовых точек Юникода напрямую отображаются в кодировку ASCII. Информацию по Юникоду смотрите в Руководстве по JavaScript.
Обратите внимание, что метод charCodeAt() всегда возвращает значение, меньшее 65536. Так происходит потому, что большие кодовые точки представляются парой (меньших значений) «суррогатных» псевдо-символов, которые используются для составления настоящего символа. Поэтому для того, чтобы получить полный символ для значений символов от 65536 и выше, необходимо получить не только значение charCodeAt(i) , но также значение charCodeAt(i + 1) (как если бы строка состояла из двух букв). Смотрите второй и третий примеры ниже.
Метод charCodeAt() возвращает NaN , если указанный индекс меньше нуля или больше длины строки.
Обратная совместимость: в более старых версиях (например, в JavaScript 1.2) метод charCodeAt() возвращал число из кодировки ISO-Latin-1 по указанному индексу. Диапазон символов в кодировке ISO-Latin-1 простирается от 0 до 255. Первые 127 чисел напрямую отображаются в кодировку ASCII.
Примеры
Пример: использование метода charCodeAt()
В следующем примере возвращается число 65, значение Unicode для латинского символа «A».
'ABC'.charCodeAt(0); // вернёт 65
Пример: исправление метода charCodeAt() для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке неизвестно
Эта версия может использоваться в циклах for, даже когда неизвестно, были ли до указанной позиции символы из не-БМП.
function fixedCharCodeAt(str, idx) // например, fixedCharCodeAt('\uD800\uDC00', 0); // 65536 // например, fixedCharCodeAt('\uD800\uDC00', 1); // false idx = idx || 0; var code = str.charCodeAt(idx); var hi, low; // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F, // чтобы трактовать старшую часть суррогатной пары в частной плоскости как // одиночный символ) if (0xD800 code && code 0xDBFF) hi = code; low = str.charCodeAt(idx + 1); if (isNaN(low)) throw 'Старшая часть суррогатной пары без следующей младшей в fixedCharCodeAt()'; > return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; > if (0xDC00 code && code 0xDFFF) // Младшая часть суррогатной пары // Мы возвращаем false, чтобы цикл пропустил эту итерацию, // поскольку суррогатная пара // уже обработана в предыдущей итерации return false; // hi = str.charCodeAt(idx - 1); // low = code; // return ((hi - 0xD800) * 0x400) + // (low - 0xDC00) + 0x10000; > return code; >
Пример: исправление метода charCodeAt() для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке известно
function knownCharCodeAt(str, idx) str += ''; var code, end = str.length; var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; while ((surrogatePairs.exec(str)) != null) var li = surrogatePairs.lastIndex; if (li - 2 idx) idx++; > else break; > > if (idx >= end || idx 0) return NaN; > code = str.charCodeAt(idx); var hi, low; if (0xD800 code && code 0xDBFF) hi = code; low = str.charCodeAt(idx + 1); // Перешагиваем через один, поскольку один «символ» является частью суррогатной пары return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; > return code; >
Спецификации
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
JavaScript | Как получить символ по символьному коду?
У нас есть символьный код 1067 . Мы не знаем что это за символ, но хотим делать по нему проверку строк.
Как конвертировать один символьный код в символьную строку при помощи JavaScript?
В решении задачи конвертации символьного кода нам поможет конструктор класса String и его собственный метод fromCharCode() .
В результате выполнения этого кода нам вернётся строка «Ы» (заглавная буква Ы)
Зачем искать по символьному коду? Применение на практике
Мы хотим проверить есть ли искомый символ в слове «КРЫСА» по символьному коду:
'КРЫСА'.includes(String.fromCharCode(1067))
Результат работы выражения:
Мы получили ИСТИНУ, потому что символьный код 1067 обозначает символ «Ы», который входит в состав последовательности символов «КРЫСА». По итогу буква «Ы» входит в слово «КРЫСА».
Плюс данного решения заключается в том, что мы точно знаем, о каком символе идёт речь. Символ языка (в данном случае буква русского алфавита) точно идентифицирован в виде числа.
Почему лучше всего искать по символьному коду?
Проблема заключается в том, что не все символы отображаются правильно в разных системах.
Скажу так. Не все символы можно ВИЗУАЛЬНО точно идентифицировать. Некоторые символы ВИЗУАЛЬНО ПОХОЖИ ДРУГ НА ДРУГА, но по факту являются разными.
К таким «нестабильным» символам можно отнести пробелы, дефисы, буквы разных языковых алфавитов и так далее.
Использование символьных кодов позволит НЕ ГАДАТЬ, а точно понимать о каком символе идёт речь и писать более удобный код программы для восприятия.
Методы charAt и charCodeAt — Возвращаем символ и КОД символа
Рассмотрим работу двух методов объекта String — это методы charAt и charCodeAt .
Первый позволяет узнать, какой символ содержит строка под определенным индексом.
Второй позволяет узнать, какой код имеет символ строки под определенным индексом.
Метод charAt — Возвращаем символ строки
Метод charAt возвращает символ строки по указанному индексу .
Напомним : каждый элемент (символ) строки имеет порядковый номер — индекс. При этом отсчет ведется с 0 .
Рассмотрим пример с произвольным строковым значением переменной (или с произвольным объектом String ).
document. write ( name . charAt ( 2 )); /* Выводим на экран символ строки под индексом 2 */
Итак, в этом примере мы вывели на экран 3-й символ строки — букву «р» , имеющую индекс 2 (отсчет символов ведется с 0 ).
Метод charCodeAt — Возвращаем КОД символа строки
Метод charCodeAt возвращает код символа строки по указанному индексу .
В JavaScript каждый символ имеет код, который может быть использован в некоторых случаях. Далее мы проработаем этот момент.
А сейчас вернемся к предыдущему примеру и посмотрим, как работает метод charCodeAt .
document. write ( name . charCodeAt ( 2 )); /* Выводим на экран КОД символа строки под индексом 2 */
При помощи метода charCodeAt мы вывели на экран код 3-го символа строки (имеющего индекс 2 ), то есть код буквы «р» — это число «1088» .
Юникод U+ и HTML-код символов — Коды букв русского алфавита
Наверное, некоторым из Вас не ясно, о каком коде шла речь , когда мы рассматривали метод charCodeAt ?
Любой символ : знаки препинания, заглавные и строчные русские и латинские буквы и т.д. — все они имеют свой код в кодировке Unicode , а также HTML-код .
Для примера вернемся к букве «р» из предыдущего примера.
Она имеет Юникод U+0440 и HTML-код р
Так вот JavaScript в результате работы метода charCodeAt , выдает нам именно цифровую часть HTML-кода указанного символа.
Теперь, при помощи метода charCodeAt выясним, какие коды имеют русские заглавные и строчные буквы?
var letter_UP = «АЯ» ;
var letter_DOWN = «ая» ;
var first_letter_UP = letter_UP . charCodeAt ( 0 ); /* Заносим в переменную код заглавной буквы А */
var last_letter_UP = letter_UP . charCodeAt ( 1 ); /* Заносим в переменную код заглавной буквы Я */
document. write ( «Русские ЗАГЛАВНЫЕ буквы имеет код, начиная с » + first_letter_UP + » и заканчивая » + last_letter_UP );
var first_letter_DOWN = letter_DOWN . charCodeAt ( 0 ); /* Заносим в переменную код буквы а */
var last_letter_DOWN = letter_DOWN . charCodeAt ( 1 ); /* Заносим в переменную код буквы я */
document. write ( «Русские строчные буквы имеет код, начиная с » + first_letter_DOWN + » и заканчивая » + last_letter_DOWN );
document. write ( «Таким образом, коды ВСЕХ русских букв находятся в диапазоне от » + first_letter_UP + « и до » + last_letter_DOWN + « ВКЛЮЧИТЕЛЬНО» );
Методы charAt и charCodeAt — Рассмотрим реальный пример
Рассмотрим реальный пример использования методов charAt и charCodeAt . Необходимо написать код, который будет делать следующее:
1. Нужно попросить у пользователя ввести Имя русскими буквами (любыми — строчными или заглавными).
2. При этом проверить, нет ли в имени помимо русских букв других символов.
3. Затем при написании имени, нужно будет пробовать вводить одну/несколько латинских букв вместо русских.
Для решения этой задачи нужно будет вспомнить тему циклов и просмотреть заметку логические операторы И и ИЛИ в Javascript. Также нужен будет метод prompt объекта Window.
Для составления условия нужен будет диапазон кодов для всех букв русского алфавита (заглавных и строчных). См. предыдущий пример.
var name = «АнтоQ» ; /* Делаем намеренно в Имени ошибку — это буква Q */
document. write ( «Вы ввели имя , » + name + «
» );
var i = 0 ; /* Создаём переменную i — это счётчик. i = 0, так как 0 — это индекс первой буквы имени */
if( name . charCodeAt ( i ) < 1040 || name . charCodeAt ( i ) >1103 ) /* Если КОД текущего символа в имени не попадает в диапазон кодов для букв русского алфавита, то выводим об этом сообщение. */
document. write ( «В имени присутствует недопустимый символ » + name . charAt ( i ) + «. Используйте только русские буквы!
» ); /* Выводим недопустимый символ */
>
i ++ ; /* Прибавляем к счетчику единицу */
Итак, в этом примере при помощи цикла while, условия ИЛИ и метода charCodeAt мы поочереди проверили каждую букву в имени на предмет попадания ее КОДа в диапазон кодов для всех букв русского алфавита.
А при помощи метода charAt — вывели на экран недопустимый символ.
Эту же задачу можно реализовать при помощи цикла for. Смотрите пример ниже.
document. write ( «Вы ввели имя , » + name + «
» );
document. write ( «В имени присутствует недопустимый символ » + name . charAt ( i ) + «. Используйте только русские буквы!
» );
>
И, наконец, добавим метод prompt. Попробуйте в результате самостоятельно ввести любое имя, добавив в него несколько латинских букв.
var name = prompt ( «Введите Ваше имя» ); /* Создаем поле для ввода Имени */
document. write ( «Вы ввели имя , » + name + «
» );
document. write ( «В имени присутствует недопустимый символ » + name . charAt ( i ) + «. Используйте только русские буквы!
» );
>