charAt()
Метод charAt () возвращает символ по указанному индексу в строке.
Индекс первого символа — 0, индек второго — 1 и т. д.
Совет. Индекс последнего символа в строке — string.length-1, предпоследнего — string.length-2 и т.д.
См. в “Дополнительные примеры”.
Поддержка браузеров
Синтаксис
Значения параметров
Параметр | Описание |
index | Обязательный. Целое число, представляющее индекс символа, который вы хотите вернуть |
Технические подробности
Возвращаемое значение: | Строка, представляющая символ в указанном индексе, или пустую строку, если номер индекса не найден |
Версия JavaScript: | ECMAScript 1 |
Дополнительные примеры
Вернет последний символ строки:
var string = "HELLO WORLD"; var result = string.charAt(string.length-1);
Результатом result будет:
charAt
Символы идут слева направо. Первый символ имеет позицию 0, а последний string.length-1 .
Если указанный index лежит за пределами этого диапазона, яваскрипт вернет пустую строку.
Пример: перечисление символов в строке
var anyString="Привет, мир" document.writeln("Символ на позиции 0 '" + anyString.charAt(0) + "'") document.writeln("Символ на позиции 1 '" + anyString.charAt(1) + "'") document.writeln("Символ на позиции 2 '" + anyString.charAt(2) + "'") document.writeln("Символ на позиции 3 '" + anyString.charAt(3) + "'") document.writeln("Символ на позиции 4 '" + anyString.charAt(4) + "'") document.writeln("Символ на позиции 999 '" + anyString.charAt(999) + "'")
Символ на позиции 0 'П' Символ на позиции 1 'р' Символ на позиции 2 'и' Символ на позиции 3 'в' Символ на позиции 4 'е' Символ на позиции 999 ''
Автор: ixth, дата: 17 февраля, 2010 — 23:52
Вместо charAt можно обращаться к символам, как к элементам массива. В литературе пишут, что это не стандартизировано, а кое-где, что не поддерживается некоторыми браузерами. Для каких браузеров это актуально?
Автор: B@rmaley.e>
Автор: Гость (не зарегистрирован), дата: 21 февраля, 2010 — 22:17
где же само описание функции?
Автор: vahrusha, дата: 17 августа, 2010 — 18:44
Обращение к символам, как к элементам массива не поддерживается Internet Explorer до 7-ой версии. IE8 без заданного доктайпа также не поддерживает. Проверено, что если указать доктайп xhtml 1.0 strict, то метод работает в IE8. Работу с другими доктайпами не проверял.
Автор: Гость (не зарегистрирован), дата: 3 ноября, 2010 — 11:43
А если текст представляет из себя несколько строк, как задать нужный символ не из первой строки.
Автор: Гость (не зарегистрирован), дата: 4 марта, 2011 — 14:57
разбить текст на строки и из нужной строки вытащить символ:
var chr = text.split("\n")[line].charAt(index);
Автор: Гость (не зарегистрирован), дата: 17 марта, 2013 — 19:45
есть строка «11223344», я хочу заменить в ней третий символ на 5, как это сделать?
Автор: Гость (не зарегистрирован), дата: 19 марта, 2013 — 03:35
Насколько я знаю, после создания строки её уже не изменить, поэтому придется переписывать первые два символа в новую строку, затем вместо третьего добавлять к новой строке 5, а уже после переписывать оставшуюся часть строки.
Автор: Гость (не зарегистрирован), дата: 11 июня, 2013 — 11:14
как из строки «телефона» 89876544321 сделать 8 987 654-43-21 ?
Автор: Гость (не зарегистрирован), дата: 12 марта, 2015 — 11:25
var formatPhoneNumber = function(str) < var res = ''; str += ''; for (var i=0;ielse if (6 === i || 8 === i) < res += str.charAt(i) + '-'; >else < res += str[i]; >> return res; >
Автор: Гость (не зарегистрирован), дата: 7 августа, 2013 — 16:21
А как извлечь 1 символ после пробела? Для формирования кратких инициалов. Подскажите пример
Автор: Гость (не зарегистрирован), дата: 15 мая, 2014 — 06:48
м-да.
поначалу вроде обрадовался — классный ресурс, много написано, куча примеров.
Но всё больше и больше разочаровываюсь в этом ресурсе.
Многие статьи датированы 2009 годом и с тех пор не обновлялись, но ведь технологии не стоят на месте, развиваются.
Автору сайта конечно большой респект за огромнейшие труды, потраченные на создание сего творения. Но взялся за гуж — не говори, что не дюж. Поддерживать надо всё оперативно в актуальном состоянии.
В частности, строковые типы вообще практически не описаны. А ведь там очень много методов!
Автор: Гость (не зарегистрирован), дата: 11 июля, 2014 — 13:49
Это кстати типично только для рунета — зайти на ресурс, сказать «автор конечно молодец, но..» и обосрать. Что-то на генетическом уровне, наверное.
Автор: Гость (не зарегистрирован), дата: 11 июля, 2014 — 13:51
А вы, уважаемый гость, готовы платить автору ресурса за поддержание информации в актуальном состоянии, или «за просто так» хочется? Это ведь труд, поговорки ваши на хлеб не намажешь.
Автор: Илья Кантор, дата: 16 июля, 2014 — 10:18
Уверяю вас, с 2009 года работа метода charAt никак не изменилась!
Что же касается других строковых методов — они тоже есть.
Автор: Гость (не зарегистрирован), дата: 30 июня, 2015 — 18:09
подскажите пожалуйста: есть строка длинной 60 символов, но мне нужно отобразить первые 40, остальные скрыть, просто что бы не было их видно. Как это реализовать?
Автор: Mips, дата: 6 сентября, 2015 — 18:37
присвоить другой переменной и урезать до 40 символов
var stroka_40_bukv = stroka_60_bukv.substr(0,40);
Автор: osdal (не зарегистрирован), дата: 3 марта, 2016 — 10:26
А метод, описанный в книге Монкура CharA уже не работает?
Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 — 07:11
Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 — 14:13
Отправить комментарий
- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
Для остальных вопросов и обсуждений есть форум.
Поиск по сайту |
Содержание | ||
Учебник javascript
Основные элементы языка
Сундучок с инструментами
Интерфейсы
Все об AJAX
Оптимизация
Разное
Методы charAt и charCodeAt — Возвращаем символ и КОД символаРассмотрим работу двух методов объекта String — это методы charAt и charCodeAt . Первый позволяет узнать, какой символ содержит строка под определенным индексом. Второй позволяет узнать, какой код имеет символ строки под определенным индексом. Метод charAt — Возвращаем символ строкиМетод charAt возвращает символ строки по указанному индексу . Напомним : каждый элемент (символ) строки имеет порядковый номер — индекс. При этом отсчет ведется с 0 . Рассмотрим пример с произвольным строковым значением переменной (или с произвольным объектом String ). Фрагмент кода var name = «Воронеж» ; document. write ( name . charAt ( 2 )); /* Выводим на экран символ строки под индексом 2 */ Итак, в этом примере мы вывели на экран 3-й символ строки — букву «р» , имеющую индекс 2 (отсчет символов ведется с 0 ). Метод charCodeAt — Возвращаем КОД символа строкиМетод charCodeAt возвращает код символа строки по указанному индексу . В JavaScript каждый символ имеет код, который может быть использован в некоторых случаях. Далее мы проработаем этот момент. А сейчас вернемся к предыдущему примеру и посмотрим, как работает метод charCodeAt . Фрагмент кода var name = «Воронеж» ; 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 first_letter_UP = letter_UP . charCodeAt ( 0 ); /* Заносим в переменную код заглавной буквы А */ var first_letter_DOWN = letter_DOWN . charCodeAt ( 0 ); /* Заносим в переменную код буквы а */ 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. Смотрите пример ниже. Фрагмент кода var name = «АнтоQ» ; document. write ( «Вы ввели имя , » + name + « » ); document. write ( «В имени присутствует недопустимый символ » + name . charAt ( i ) + «. Используйте только русские буквы! » ); И, наконец, добавим метод prompt. Попробуйте в результате самостоятельно ввести любое имя, добавив в него несколько латинских букв. Фрагмент кода var name = prompt ( «Введите Ваше имя» ); /* Создаем поле для ввода Имени */ document. write ( «Вы ввели имя , » + name + « » ); document. write ( «В имени присутствует недопустимый символ » + name . charAt ( i ) + «. Используйте только русские буквы! » ); String.prototype.charAt()Метод charAt() возвращает указанный символ из строки. Синтаксисstr.charAt(index) ПараметрыЦелое число от 0 до длины строки минус 1. ОписаниеСимволы в строке идут слева направо. Индекс первого символа равен 0, а последнего символа в строке stringName равен stringName.length — 1 . Если предоставленный вами параметр index выходит за пределы этого диапазона, JavaScript вернёт пустую строку. ПримерыПример: отображение символов из различных позиций строкиСледующий пример показывает символы в различных позициях в строке «Дивный новый мир» : var anyString = "Дивный новый мир"; console.log("Символ по индексу 0 равен '" + anyString.charAt(0) + "'"); console.log("Символ по индексу 1 равен '" + anyString.charAt(1) + "'"); console.log("Символ по индексу 2 равен '" + anyString.charAt(2) + "'"); console.log("Символ по индексу 3 равен '" + anyString.charAt(3) + "'"); console.log("Символ по индексу 4 равен '" + anyString.charAt(4) + "'"); console.log("Символ по индексу 5 равен '" + anyString.charAt(5) + "'"); console.log("Символ по индексу 999 равен '" + anyString.charAt(999) + "'"); Этот код отобразит следующее: 0 равен 'Д' Символ по индексу 1 равен 'и' Символ по индексу 2 равен 'в' Символ по индексу 3 равен 'н' Символ по индексу 4 равен 'ы' Символ по индексу 5 равен 'й' Символ по индексу 999 равен '' Пример: получение целых символовСледующий пример показывает, как обойти строку в цикле, каждый раз гарантированно получая целый символ, даже если строка содержит символы, не помещающиеся на Базовую многоязыковую плоскость (БМП). var str = "A \uD87E\uDC04 Z"; // Также можно использовать не-БМП символы напрямую for (var i = 0, chr; i str.length; i++) if ((chr = getWholeChar(str, i)) === false) continue; > // Поместите эти строки в самое начало каждого цикла, передавая в функцию строку // и текущую итерацию; возвращаемая переменная будут представлять // отдельный символ console.log(chr); > function getWholeChar(str, i) var code = str.charCodeAt(i); if (isNaN(code)) return ""; // Позиция не найдена > if (code 0xd800 || code > 0xdfff) return str.charAt(i); > // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F, // чтобы трактовать старшую часть суррогатной пары в частной плоскости как // одиночный символ) if (0xd800 code && code 0xdbff) if (str.length i + 1) throw "Старшая часть суррогатной пары без следующей младшей"; > var next = str.charCodeAt(i + 1); if (0xdc00 > next || next > 0xdfff) throw "Старшая часть суррогатной пары без следующей младшей"; > return str.charAt(i) + str.charAt(i + 1); > // Младшая часть суррогатной пары (0xDC00 if (i === 0) throw "Младшая часть суррогатной пары без предшествующей старшей"; > var prev = str.charCodeAt(i - 1); // (последнее число можно изменить на 0xDB7F, чтобы трактовать старшую // часть суррогатной пары в частной плоскости как одиночный символ) if (0xd800 > prev || prev > 0xdbff) throw "Младшая часть суррогатной пары без предшествующей старшей"; > // Теперь мы можем пропустить младшую часть суррогатной пары, // которую мы уже обработали return false; > В среде, поддерживающей JavaScript 1.7+ (например, в Firefox), который позволяет деструктурирующее присваивание, можно использовать более лаконичную и более гибкую альтернативу в том смысле, что она автоматически увеличивает счётчик (если символ гарантированно является суррогатной парой). var str = "A\uD87E\uDC04Z"; // Также можно использовать не-БМП символы напрямую for (var i = 0, chr; i str.length; i++) [chr, i] = getWholeCharAndI(str, i); // Поместите эту строку в самое начало каждого цикла, передавая в функцию строку // и текущую итерацию; возвращаемый массив будет содержать отдельный символ и // новое значение счётчика цикла 'i' (изменится только при встрече суррогатной пары) console.log(chr); > function getWholeCharAndI(str, i) var code = str.charCodeAt(i); if (isNaN(code)) return ""; // Позиция не найдена > if (code 0xd800 || code > 0xdfff) return [str.charAt(i), i]; // Обычный символ, оставляем переменную 'i' неизменной > // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F, // чтобы трактовать старшую часть суррогатной пары в частной плоскости как // одиночный символ) if (0xd800 code && code 0xdbff) if (str.length i + 1) throw "Старшая часть суррогатной пары без следующей младшей"; > var next = str.charCodeAt(i + 1); if (0xdc00 > next || next > 0xdfff) throw "Старшая часть суррогатной пары без следующей младшей"; > return [str.charAt(i) + str.charAt(i + 1), i + 1]; > // Младшая часть суррогатной пары (0xDC00 if (i === 0) throw "Младшая часть суррогатной пары без предшествующей старшей"; > var prev = str.charCodeAt(i - 1); // (последнее число можно изменить на 0xDB7F, чтобы трактовать старшую // часть суррогатной пары в частной плоскости как одиночный символ) if (0xd800 > prev || prev > 0xdbff) throw "Младшая часть суррогатной пары без предшествующей старшей"; > // Возвращаем следующий символ (и увеличиваем счётчик) return [str.charAt(i + 1), i + 1]; > Пример: добавление к методу charAt() поддержки символов не в Базовой многоязыковой плоскости (БМП)В то время как пример выше может быть более полезен тем, кто хочет поддерживать символы не в плоскости БМП (поскольку он не требует от вызывающей стороны знания о том, где может встретиться символ из не-БМП), в случае, если кто-то желает выбирать символы по индексу и трактовать суррогатную пару внутри строки как один символ, он может использовать следующий код: function fixedCharAt(str, idx) var ret = ""; str += ""; var 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 ""; > ret += str.charAt(idx); if ( /[\uD800-\uDBFF]/.test(ret) && /[\uDC00-\uDFFF]/.test(str.charAt(idx + 1)) ) // Перешагиваем через один, поскольку один «символ» является частью суррогатной пары ret += str.charAt(idx + 1); > return ret; > Спецификации
Совместимость с браузерамиBCD tables only load in the browser Смотрите также
|