Как найти пробел в строке javascript

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's user avatar

ckittel

6,4013 gold badges40 silver badges71 bronze badges

asked Jan 8, 2010 at 22:06

patad's user avatar

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

nickf's user avatar

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

FullStack's user avatar

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 Creasey's user avatar

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

epicwhale's user avatar

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 Clelland's user avatar

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

slim's user avatar

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 Saxena's user avatar

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
}

Community's user avatar

answered Jul 14, 2010 at 19:58

Will Strohmeier's user avatar

This can be fast solution

return input < "u0020" + 1;

answered Jul 31, 2019 at 9:22

9me's user avatar

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

Аспирант

Отправить личное сообщение для marc

Посмотреть профиль

Найти все сообщения от marc

 

Регистрация: 02.12.2017

Сообщений: 81

Найти второй пробел

Подскажите, как найти второй пробел в строке?

let str = ‘exit test some’;

let value;

value = str.indexOf(‘ ‘);

Ответить с цитированием

Старый

18.01.2018, 15:59

Профессор

Отправить личное сообщение для Nexus

Посмотреть профиль

Найти все сообщения от Nexus

 

Регистрация: 04.12.2012

Сообщений: 3,616

Вариант не очень хороший, но вариант:

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


Последний раз редактировалось Nexus, 18.01.2018 в 16:20.

Ответить с цитированием

Старый

18.01.2018, 16:05

Аспирант

Отправить личное сообщение для marc

Посмотреть профиль

Найти все сообщения от marc

 

Регистрация: 02.12.2017

Сообщений: 81

Это вы сделали что-то вроде добавления двух пробелов?

Ответить с цитированием

Старый

18.01.2018, 16:06

Профессор

Отправить личное сообщение для laimas

Посмотреть профиль

Найти все сообщения от laimas

 

Регистрация: 14.01.2015

Сообщений: 12,990

Ответить с цитированием

Старый

18.01.2018, 16:09

Аспирант

Отправить личное сообщение для marc

Посмотреть профиль

Найти все сообщения от marc

 

Регистрация: 02.12.2017

Сообщений: 81

Nexus,
Там просто просчитано вручную, а мне надо как-то без подсчёта вручную

Ответить с цитированием

Старый

18.01.2018, 16:09

Профессор

Отправить личное сообщение для Nexus

Посмотреть профиль

Найти все сообщения от Nexus

 

Регистрация: 04.12.2012

Сообщений: 3,616

laimas, ваш вариант вернет не индекс символа, но сам символ.
Глупое занятие, при условии того, что символ извлекается определенный.
Т.е. результат заведомо известный.

Ответить с цитированием

Старый

18.01.2018, 16:10

Профессор

Отправить личное сообщение для Nexus

Посмотреть профиль

Найти все сообщения от Nexus

 

Регистрация: 04.12.2012

Сообщений: 3,616

marc, это без подсчета вручную.

Ответить с цитированием

Старый

18.01.2018, 16:12

Аспирант

Отправить личное сообщение для marc

Посмотреть профиль

Найти все сообщения от marc

 

Регистрация: 02.12.2017

Сообщений: 81

Nexus,
В вашем варианте – да, а в статье по-моему вручную просчитывается.

Ответить с цитированием

Старый

18.01.2018, 16:15

Профессор

Отправить личное сообщение для Nexus

Посмотреть профиль

Найти все сообщения от Nexus

 

Регистрация: 04.12.2012

Сообщений: 3,616

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 для подготовки джуна к собеседованию по фронтенду

Добавить комментарий