Подтвердить что ты не робот

Проверить, является ли один символ пробелом?

Каков наилучший способ проверить, является ли один символ пробелом?

Я знаю, как проверить это через регулярное выражение.

Но я не уверен, что это лучший способ, если у меня только один персонаж.

Разве нет лучшего способа (относительно производительности) проверить, является ли это пробелом?

Если я сделаю что-то подобное Я бы пропустил пробелы, как вкладки, я думаю?

if (ch == ' ') {
    ...
}
4b9b3361

Ответ 1

Если вы хотите протестировать только определенные пробельные символы, сделайте это вручную, иначе используйте регулярное выражение, то есть

/\s/.test(ch)

Имейте в виду, что разные браузеры соответствуют различным символам, например, в Firefox, \s эквивалентно (source)

[ \f\n\r\t\v\u00A0\u2028\u2029]

тогда как в Internet Explorer он должен быть (source)

[ \f\n\r\t\v]

Страница MSDN фактически забыла пробел;)

Ответ 2

Я ссылался на набор символов пробелов, сопоставляемых PHP trim без стыда (минус нулевой байт, я понятия не имею, как браузеры будут обрабатывать это).

if (' \t\n\r\v'.indexOf(ch) > -1) {
    // ...
}

Это выглядит прежде всего преждевременной оптимизацией.

Ответ 3

Подход регулярного выражения - это надежный способ. Но вот что я делаю, когда я ленив и забываю правильный синтаксис регулярных выражений:

str.trim() === '' ? alert('just whitespace') : alert('not whitespace');

Ответ 4

это охватывает пробелы, вкладки и символы новой строки:

if ((ch == ' ') || (ch == '\t') || (ch == '\n'))

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

если производительность действительно важна, возможно, лучше всего рассмотреть большую картину, чем отдельные операции, подобные этой...

Ответ 5

Хотя это не совсем правильно, я использую это прагматичное и быстрое решение:

if (ch.charCodeAt(0) <= 32) {...

Ответ 6

var testWhite = (x) {
    var white = new RegExp(/^\s$/);
    return white.test(x.charAt(0));
};

Эта небольшая функция позволит вам ввести строку переменной длины в качестве аргумента, и она сообщит "true", если первый символ - это пробел или "ложь" в противном случае. Вы можете легко поместить любой символ из строки в функцию, используя методы indexOf или charAt. Примеры:

var str = "Today I wish I were not in Afghanistan.";
testWhite(str.charAt(9));  // This would test character "i" and would return false.
testWhite(str.charAt(str.indexOf("I") + 1));  // This would return true.

Ответ 7

Ответ @jake выше - использование метода trim() - лучший вариант. Если у вас есть один символ ch в виде шестнадцатеричного числа:

String.fromCharCode(ch).trim() === ""

вернет true для всех пробельных символов.

К сожалению, сравнение, подобное <=32, не поймает все пробельные символы. Например; 0xA0 (неразрывный пробел) в Javascript рассматривается как пробел, и все же он> 32. Поиск с использованием indexOf() со строкой, подобной "\t\n\r\v", будет некорректным по той же причине.

Вот короткий фрагмент JS, который иллюстрирует это: https://repl.it/@saleemsiddiqui/JavascriptStringTrim

Ответ 8

как насчет этого: ((1L < ch) и ((ch - 64) → 31) и 0x100002600L)!= 0L