This function checks for other types of whitespace, not just space (tab, carriage return, etc.)
import some from 'lodash/fp/some'
const whitespaceCharacters = [' ', ' ',
'b', 't', 'n', 'v', 'f', 'r', `"`, `'`, `\`,
'u0008', 'u0009', 'u000A', 'u000B', 'u000C',
'u000D', 'u0020','u0022', 'u0027', 'u005C',
'u00A0', 'u2028', 'u2029', 'uFEFF']
const hasWhitespace = char => some(
w => char.indexOf(w) > -1,
whitespaceCharacters
)
console.log(hasWhitespace('a')); // a, false
console.log(hasWhitespace(' ')); // space, true
console.log(hasWhitespace(' ')); // tab, true
console.log(hasWhitespace('r')); // carriage return, true
If you don’t want to use Lodash, then here is a simple some
implementation with 2 s
:
const ssome = (predicate, list) =>
{
const len = list.length;
for(const i = 0; i<len; i++)
{
if(predicate(list[i]) === true) {
return true;
}
}
return false;
};
Then just replace some
with ssome
.
const hasWhitespace = char => some(
w => char.indexOf(w) > -1,
whitespaceCharacters
)
For those in Node, use:
const { some } = require('lodash/fp');
What is the best way to check if a string contains only whitespace?
The string is allowed to contain characters combined with whitespace, but not just whitespace.
ckittel
6,4013 gold badges40 silver badges71 bronze badges
asked Jan 8, 2010 at 22:06
0
Instead of checking the entire string to see if there’s only whitespace, just check to see if there’s at least one character of non whitespace:
if (/S/.test(myString)) {
// string is not empty and not just whitespace
}
answered Jan 8, 2010 at 22:17
nickfnickf
535k198 gold badges648 silver badges721 bronze badges
3
Simplest answer if your browser supports the trim()
function
if (myString && !myString.trim()) {
//First condition to check if string is not empty
//Second condition checks if string contains just whitespace
}
answered Mar 9, 2015 at 12:01
FullStackFullStack
5,8324 gold badges41 silver badges76 bronze badges
1
if (/^s+$/.test(myString))
{
//string contains only whitespace
}
this checks for 1 or more whitespace characters, if you it to also match an empty string then replace +
with *
.
answered Jan 8, 2010 at 22:12
Paul CreaseyPaul Creasey
28.3k10 gold badges54 silver badges90 bronze badges
0
Well, if you are using jQuery, it’s simpler.
if ($.trim(val).length === 0){
// string is invalid
}
answered Jul 7, 2011 at 12:48
epicwhaleepicwhale
1,81618 silver badges26 bronze badges
2
Just check the string against this regex:
if(mystring.match(/^s+$/) === null) {
alert("String is good");
} else {
alert("String contains only whitespace");
}
answered Jan 8, 2010 at 22:11
Ian ClellandIan Clelland
42.8k8 gold badges86 silver badges87 bronze badges
1
if (!myString.replace(/^s+|s+$/g,""))
alert('string is only whitespace');
answered Jan 8, 2010 at 22:13
slimslim
2,5451 gold badge24 silver badges38 bronze badges
I’ve used the following method to detect if a string contains only whitespace. It also matches empty strings.
if (/^s*$/.test(myStr)) {
// the string contains only whitespace
}
answered Feb 15, 2019 at 7:24
Rajat SaxenaRajat Saxena
3,8144 gold badges45 silver badges62 bronze badges
The regular expression I ended up using for when I want to allow spaces in the middle of my string, but not at the beginning or end was this:
[S]+(s[S]+)*
or
^[S]+(s[S]+)*$
So, I know this is an old question, but you could do something like:
if (/^s+$/.test(myString)) {
//string contains characters and white spaces
}
or you can do what nickf said and use:
if (/S/.test(myString)) {
// string is not empty and not just whitespace
}
answered Jul 14, 2010 at 19:58
This can be fast solution
return input < "u0020" + 1;
answered Jul 31, 2019 at 9:22
9me9me
1,07810 silver badges35 bronze badges
1
Строки
Строки, объект String и его методы
Последнее обновление: 10.09.2021
Для создания строк мы можем как напрямую присваивать переменной или константе строку:
const name = "Tom";
Для работы со строками предназначен объект String, поэтому также можно использовать конструктор String:
const name = new String("Tom");
Но как правило, используется первый более краткий способ. В первом случае JavaScript при необходимости автоматически преобразует
переменную примитивного типа в объект String.
Объект String имеет большой набор свойств и методов, с помощью которых мы можем манипулировать строками.
Длина строки
Свойство length указывает на длину строки:
const hello = "привет мир"; console.log(`В строке "${hello}" ${hello.length} символов`); // В строке "привет мир" 10 символов
Повторение строки
Метод repeat() позволяет создать строку путем многократного повторения другой строки. Количество повторов передается в качестве аргумента:
const hello = "hello "; console.log(hello.repeat(3)); // hello hello hello
Поиск в строке
Для поиска в строке некоторой подстроки используются методы indexOf() (индекс первого вхождения подстроки) и
lastIndexOf() (индекс последнего вхождения подстроки). Эти методы принимают два параметра:
-
Подстроку, которую надо найти
-
Необязательный параметр, который указывает, с какого символа следует проводить поиск подстроки в строке
Оба этих метода возвращают индекс символа, с которого в строке начинается подстрока. Если подстрока не найдена, то возвращается число -1.
const hello = "привет мир. пока мир"; const key = "мир"; const firstPos = hello.indexOf(key); const lastPos = hello.lastIndexOf(key); console.log("Первое вхождение: ", firstPos); // 7 console.log("Последнее вхождение: ", lastPos); // 17
Еще один метод – includes() возвращает true, если строка содержит определенную подстроку.
const hello = "привет мир. пока мир"; console.log(hello.includes("мир")); // true console.log(hello.includes("миг")); // false
С помощью второго дополнительного параметра можно определить индекс, с которого будет начинаться поиск подстроки:
const hello = "привет мир. пока мир"; console.log(hello.includes("мир", 5)); // true console.log(hello.includes("привет", 6)); // false
Выбор подстроки
Для того, чтобы вырезать из строки подстроку, применяются методы substring() и slice().
Substring
Метод substring() принимает два параметра:
-
индекс символа в строке, начиная с которого надо проводить обрезку строки. Обязательный параметр
-
индекс, до которого надо обрезать строку. Необязательный параметра – если он не указан, то обрезается вся остальная часть строки
const hello = "привет мир. пока мир"; const world = hello.substring(7, 10); // с 7-го по 10-й индекс console.log(world); // мир const bye = hello.substring(12); // c 12 индекса до конца строки console.log(bye); // пока мир
slice
Еще один метод slice также позволяет получить из строки какую-то ее часть. Она принимает два параметра:
-
индекс символа в строке, начиная с которого надо проводить обрезку строки. Обязательный параметр
-
индекс, до которого надо обрезать строку. Необязательный параметра – если он не указан, то обрезается вся остальная часть строки
const hello = "привет мир. пока мир"; const world = hello.slice(7, 10); // с 7-го по 10-й индекс console.log(world); // мир const bye = hello.slice(12); // c 12 индекса до конца строки console.log(bye); // пока мир
Можно заметить, что этот метод похож на метод substring()
, тем не менее между ними есть небольшие различие.
Прежде всего, в slice()
начальный индекс должен быть меньше чем конечный. В substring()
, если начальный индекс больше конечного, то они меняются местами
(то есть substring(5, 1)
будет равноценно substring(1, 5)
):
const hello = "привет мир. пока мир"; const world1 = hello.slice(6, 0); // console.log(world1); // const world2 = hello.substring(6, 0); // аналогично hello.substring(0, 6) console.log(world2); // привет
Другое отличие, что slice
позволяет использовать отрицательные индексы. Отрицательный индекс указывает на индекс символа относительно конца строки.
substring()
же отрицательные индексы не поддерживает:
const hello = "привет мир. пока мир"; const bye1 = hello.slice(-8, -4); // с 8-го индекса с конца до 4 индекса с конца console.log(bye1); // const bye2 = hello.substring(-8, -4); // не работает console.log(bye2); //
Управление регистром
Для изменения регистра имеются методы toLowerCase() (для перевода в нижний регистр) и
toUpperCase() (для перевода в верхний регистр).
const hello = "Привет Том"; console.log(hello.toLowerCase()); // привет том console.log(hello.toUpperCase()); // ПРИВЕТ ТОМ
Получение символа по индексу
Чтобы получить определенный символ в строке по индексу, можно применять методы charAt() и charCodeAt().
Оба этих метода в качестве параметра принимают индекс символа:
const hello = "Привет Том"; console.log(hello.charAt(2)); // и console.log(hello.charCodeAt(2)); // 1080
Но если в качестве результата метод charAt()
возвращает сам символ, то метод charCodeAt()
возвращает числовой код
этого символа.
Удаление пробелов
Для удаления начальных и концевых пробелов в стоке используется метод trim():
let hello = " Привет Том "; const beforeLength = hello.length; hello = hello.trim(); const afterLength = hello.length; console.log("Длина строки до: ", beforeLength); // 15 console.log("Длина строки после: ", afterLength); // 10
Дополнительно есть ряд методов, которые удаляют пробелы с определенной стороны строки:
-
trimStart(): удаляет пробел с начала строки
-
trimEnd(): удаляет пробел с конца строки
-
trimLeft(): удаляет пробел с левой части строки
-
trimRight(): удаляет пробел с правой части строки
Объединение строк
Метод concat() объединяет две строки:
let hello = "Привет "; let world = "мир"; hello = hello.concat(world); console.log(hello); // Привет мир
Замена подстроки
Метод replace() заменяет первое вхождение одной подстроки на другую:
let hello = "Добрый день"; hello = hello.replace("день", "вечер"); console.log(hello); // Добрый вечер
Первый параметр метода указывает, какую подстроку надо заменить, а второй параметр – на какую подстроку надо заменить.
В то же время у этого метода есть одна особенность – он заменяет только первое вхождение подстроки:
let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай."; menu = menu.replace("чай", "кофе"); console.log(menu); // Завтрак: каша, кофе. Обед: суп, чай. Ужин: салат, чай.
Однако еще один метод – replaceAll() позволяет заменить все вхождения подстроки:
let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай."; menu = menu.replaceAll("чай", "кофе"); console.log(menu); // Завтрак: каша, кофе. Обед: суп, кофе. Ужин: салат, кофе.
Разделение строки
Метод split() разбивает строку на массив подстрок по определенному разделителю. В качестве разделителя используется
строка, которая передается в метод:
const message = "Сегодня была прекрасная погода"; const messageParts = message.split(" "); console.log(messageParts); // ["Сегодня", "была", "прекрасная", "погода"]
В данном случае строка разделяется по проблему, то есть в итоге в массиве messageParts окажется четыре элемента.
Проверка начала и окончания строки
Метод startsWith() возвращает true, если строка начинается с определенной подстроки. А метод endsWith()
возвращает true, если строка оканчивается на определенную подстроку.
const hello = "let me speak from my heart"; console.log(hello.startsWith("let")); // true console.log(hello.startsWith("Let")); // false console.log(hello.startsWith("lets")); // false console.log(hello.endsWith("heart")); // true console.log(hello.startsWith("bart")); // false
При этом играет роль регистр символов, и из примера выше мы видим, что “let” не эквивалентно “Let”.
Дополнительный второй параметр позволяет указать индекс (для startsWith – индекс с начала, а для endsWith – индекс с конца строки), относительно которого будет производиться
сравнение:
const hello = "let me speak from my heart"; console.log(hello.startsWith("me", 4)); // true, "me" - 4 индекс с начала строки console.log(hello.startsWith("my", hello.length-8)); // true, "my" - 8 индекс с конца
Зполнение строки
Методы padStart() и padEnd() растянуть строку на определенное количество символов и заполнить строку слева и справа соответственно.
let hello = "hello".padStart(8); // " hello" console.log(hello); hello = "hello".padEnd(8); // "hello " console.log(hello);
Вызов "hello".padStart(8)
будет рястягивать строку “hello” на 8 символов. То есть изначально в строке “hello” 5 символов, значит, к ней будет добавлено 3 символа. При чем они будут добавлено в начале строки.
По умолчанию добавляемые символы представляют пробелы. Аналогично вызов "hello".padEnd(8)
растянет строку на 8 символов, но оставшие символы в виде пробелов будут добавлены в конец строки.
По умолчанию эти методы используют пробелы для заполнения, но в качестве второго параметра мы можем передать методам значение, которым надо дополнить строку:
let hello = "hello".padStart(17, "JavaScript, "); // "JavaScript, hello" hello = "hello".padEnd(12, " Eugene"); // "hello Eugene"
Если добавляемое количество символов больше добавляемой строки, то добавляемая строка повторяется:
let hello = "123".padStart(6, "0"); // "000123" hello = "123".padEnd(6, "0"); // "123000"
18.01.2018, 15:27 |
|||
|
|||
Найти второй пробел Подскажите, как найти второй пробел в строке? let str = ‘exit test some’; let value; value = str.indexOf(‘ ‘); |
18.01.2018, 15:59 |
|||
|
|||
Вариант не очень хороший, но вариант: let str = 'exit test some'; let value = str.indexOf(' ', 1 + str.indexOf(' ')); function indexOf(haystack,needle,number){ var i=0,index=-1; do{ index=haystack.indexOf(needle,1+index); } while(index>-1 && ++i<(number||1)); return index; }; var str = 'exit test some'; alert(indexOf(str,' ',2));
|
18.01.2018, 16:05 |
|||
|
|||
Это вы сделали что-то вроде добавления двух пробелов? |
18.01.2018, 16:06 |
|||
|
|||
|
18.01.2018, 16:09 |
|||
|
|||
Nexus, |
18.01.2018, 16:09 |
|||
|
|||
laimas, ваш вариант вернет не индекс символа, но сам символ. |
18.01.2018, 16:10 |
|||
|
|||
marc, это без подсчета вручную. |
18.01.2018, 16:12 |
|||
|
|||
Nexus, |
18.01.2018, 16:15 |
|||
|
|||
marc, это описание работы метода с примерами. |
Любые текстовые данные в JavaScript считаются строками. Это примитивный тип, но язык позволяет работать с ним так, будто он является объектом. В том числе — использовать встроенные в JS методы строк, которые собраны в этой шпаргалке.
Важно: при использовании методов создаётся новая строка, которая записывается в ту же переменную вместо старой строки.
1
Как изменить регистр
toLowerCase
Преобразует символы в строке в нижний регистр.
"Hello Tproger".toLowerCase(); // "hello tproger"
toUpperCase
Преобразует символы в строке в верхний регистр.
"Hello Tproger".toUpperCase(); // "HELLO TPROGER"
2
Как объединить строки
concat
Объединяет две или более строки и возвращает одну строку.
"Hello".concat(" Tproger"); // "Hello Tproger"
"Hello".concat(" T", "p", "r", "o", "g", "e", "r"); // "Hello Tproger"
3
Как разделить строку на подстроки
split
Разбивает строку в массив по указанному разделителю, которым может быть подстрока или регулярное выражение. Вторым параметром можно указать ограничитель.
// Получаем каждый символ
"Hello Tproger".split(""); // ["H", "e", "l", "l", "o", " ", "T", "p", "r", "o", "g", "e", "r"]
// Получаем каждое слово из строки
"Hello Tproger".split(" "); //["Hello", "Tproger"]
// Устанавливаем ограничитель
"Hello Tproger".split(" ", 1); //["Hello"]
4
Как повторить строку
repeat
Принимает в качестве параметра число и повторяет строку указанное количество раз.
"Tproger ".repeat(3); // "Tproger Tproger Tproger "
5
Как найти подстроку
charAt
Возвращает символ по указанному индексу.
"Hello Tproger".charAt(); // "H"
includes
Проверяет, содержит ли строка указанную подстроку. Возвращает значение true или false. Вторым параметром можно указать позицию в строке, с которой следует начать поиск.
"Hello Tproger".includes("Tproger"); // true
"Hello Tproger".includes("Hello", 1); // false
indexOf
Возвращает индекс первого найденного вхождения указанного значения. Поиск ведётся от начала до конца строки. Если совпадений нет, возвращает -1. Вторым параметром можно передать позицию, с которой следует начать поиск.
"Hello World".indexOf("o"); // 4
"Hello World".indexOf("o", 5); // 7
lastIndexOf
Возвращает индекс последнего найденного вхождения указанного значения. Поиск ведётся от конца к началу строки. Если совпадений нет, возвращает -1. Вторым параметром можно передать позицию, с которой следует начать поиск.
"Hello World".lastIndexOf("o"); // 7
"Hello World".lastIndexOf("o", 5); // 4
endsWith
Проверяет, заканчивается ли строка символами, заданными первым параметром. Возвращает true или false. Есть второй необязательный параметр — ограничитель по диапазону поиска. По умолчанию он равен длине строки.
"Hello Tproger".endsWith("Tproger"); // true
"Hello Tproger".endsWith("Tproger", 12); // false
startsWith
Проверяет, начинается ли строка с указанных символов. Возвращает true или false. Вторым параметром можно указать индекс, с которого следует начать проверку.
"Hello Tproger".startsWith("Hello"); // true
"Hello Tproger".startsWith("Hello", 1); // false
search
Проверяет, есть ли в строке указанное значение или регулярное выражение и возвращает индекс начала совпадения.
"hi, hello, hey".search("hello"); // 4
6
Как извлечь подстроку
slice
Извлекает часть строки и возвращает новую строку. Обязательный параметр — начало извлечения. Вторым параметром можно установить границу (по умолчанию — до конца строки).
"Методы строк на Tproger".slice(16); // "Tproger"
"Методы строк на Tproger".slice(16, 21); // "Tprog"
// Отрицательные значения тоже работают
"Методы строк на Tproger".slice(-7); // "Tproger"
"Методы строк на Tproger".slice(-7, -2); // "Tprog"
substring
Извлекает символы из строки между двумя указанными индексами. Второй индекс указывать не обязательно. В таком случае будут извлечены все символы от начала до конца строки. В отличие от slice, можно задавать start больше, чем end. Отрицательные значения не поддерживаются, они интерпретируются как 0.
"Методы строк на Tproger".substring(5, 2); // "тод"
substr
Извлекает часть строки указанной длины. Первым параметром принимает стартовую позицию, вторым — длину. Значение первого параметра может быть отрицательным, тогда позиция определяется с конца строки.
"Методы строк на Tproger".substr(7, 5); // "строк"
"Методы строк на Tproger".substr(-7, 5); // "Tprog"
7
Как заменить подстроку
replace
Ищет в строке указанное значение или регулярное выражение и возвращает новую строку, в которой выполнена замена на второй параметр. Можно заменить найденные значения другой строкой или передать функцию для работы над совпадениями.
"hi, hello, hi".replace("hi", "hey"); // "hey, hello, hi"
"hi, hello, hi".replace(/hi/g, "hey"); // "hey, hello, hey"
replaceAll
Даёт такой же результат, как метод replace() с глобальным флагом g. Заменяет все найденные совпадения другой строкой или переданной функцией.
"hi, hello, hi".replaceAll("hi", "hey"); // "hey, hello, hey"
8
Как добавить в строку пробелы или другие символы
padEnd
Добавляет в конце отступы, пока строка не достигнет длины, заданной первым параметром. Вторым параметром можно указать другой символ вместо пробела.
"Hello Tproger".padEnd(20, "*"); // "Hello Tproger*******"
padStart
Добавляет в начале отступы, пока строка не достигнет длины, заданной первым параметром. Вторым параметром можно указать другой символ вместо пробела.
"Hello Tproger".padStart(20, "*"); // "*******Hello Tproger"
9
Как удалить пробелы в строке
trim
Обрезает пробелы с обоих концов строки.
" Hello Tproger ".trim(); // "Hello Tproger"
trimEnd
Обрезает пробелы в конце строки
" Hello Tproger ".trimEnd(); // " Hello Tproger"
trimStart
Обрезает пробелы в начале строки
" Hello Tproger ".trimStart(); // "Hello Tproger "
10
Как работать с Юникодом
charCodeAt
Возвращает числовое значение Юникода по указанному индексу. Обратите внимание: у букв в верхнем и нижнем регистрах разные коды.
"T".charCodeAt() // 84
"t".charCodeAt() // 116
fromCharCode
Преобразует числовые значения Юникода в читаемые символы.
String.fromCharCode(72, 101, 108, 108, 111); // "Hello"
Примечание: при работе с эмодзи, редкими математическими символами, иероглифами нужно помнить о суррогатных парах. Это символы, которые записываются двумя 16-битными словами. Длина таких строк — 2.
'?'.length; // 2, редкий китайский иероглиф
Суррогатные пары не учитывались при создании JS и методы строк charCodeAt / fromCharCode обрабатывают их некорректно. Правильно работают с суррогатными парами редкие методы String.fromCodePoint и str.codePointAt, которые появились в языке недавно.
Для работы со строками в JS есть не только встроенные методы, но и сторонние библиотеки. Они решают задачи более сложные задачи. Но подключать их имеет смысл только в том случае, если возможностей встроенных методов действительно не хватает.
При составлении этой шпаргалки я пользовался «Современным учебником JavaScript» Ильи Кантора и документацией MDN.
Больше полезных материалов по JS:
- Шпаргалка по современному JavaScript
- Примеры задач по JavaScript для подготовки джуна к собеседованию по фронтенду