2009-09-30 2 views
23

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

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

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

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

Если я что-то вроде этого, я хотел бы пропустить пробелы, как вкладки я Quess ?: если (ч == ' «) { .... }

+1

Использую ((c <= 32 && c > = 0) || c == 127).Получает все пробелы и управляющие символы в ascii. – nikdeapen

ответ

6

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

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

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

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

+0

есть также '\ r' и '\ r \ n', но я бы сказал, что лучше использовать регулярное выражение, чем использовать if с 5 условиями. По-моему, это было бы быстрее. – stefita

+0

хорошо, всегда лучше проецировать в таких случаях. в зависимости от того, насколько вероятен каждый символ, короткое замыкание '||' могло бы сделать его быстрее. – Peter

+1

Это будет функция isWhiteSpace (ch) {return "\ t \ n \ r \ v" .indexOf (ch)! = -1; } – Locksfree

11

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

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

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

+4

+1 для преждевременной оптимизации. – Glenn

+0

Похоже, это немного быстрее, чем при использовании RegExp: http://jsperf.com/whitespace-character – Azmisov

29

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

/\s/.test(ch) 

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

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

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

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

страница MSDN на самом деле забыл пространство;)

+0

@kangax: приятно знать; по крайней мере, для IE, документация согласуется с фактическим результатом (недостающее пространство в стороне) – Christoph

+3

Обратите внимание, что обе связанные страницы были обновлены с тех пор - MSDN теперь включает в себя пространство, а в Mozilla включены дополнительные символы пробела Unicode – Christoph

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

Эта небольшая функция позволит ввести строку переменной длины в качестве аргумента, и он сообщит «истина», если первый символ пробела или "false" в противном случае. Вы можете легко поместить любой символ из строки в функцию, используя методы 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

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

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

как об этом один: ((1L < < ч) & ((ч - 64) >> 31) & 0x100002600L)! = 0L

+0

Извините, но это не javascript. Это C. И это вопрос о javascript. –

Смежные вопросы