2009-09-30 36 views
23

檢查單個字符是否爲空白的最佳方法是什麼?檢查單個字符是否是空白?

我知道如何通過正則表達式來檢查。

但我不確定這是否是最好的方法,如果我只有一個字符。

是否有更好的方式(關於性能)檢查它是否是空白?

如果我這樣做,我會想念空格狀突片我quess ?: 如果(CH =='「){ .... }

+1

我使用((c <= 32 && c > = 0)|| c == 127)。獲取ascii中的所有空格和控制字符。 – nikdeapen 2015-01-22 22:23:10

回答

6

這包括空格,製表符和換行符:

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

這應該是最好的表現。首先放置你期望最有可能的空白字符。

如果性能是非常重要的,可能是最好的考慮不是這樣的個體經營的大局觀......

+0

還有'\ r'和'\ r \ n',但我會說使用正則表達式比使用if有5個條件更好。我認爲這會更快。 – stefita 2009-09-30 08:50:29

+0

好吧,最好在這種情況下進行配置。取決於每個角色的可能性,「||」的短路可能實際上使其更快。 – Peter 2009-09-30 08:51:56

+1

這將做函數isWhiteSpace(ch){return「\ t \ n \ r \ v」.indexOf(ch)!= -1; } – Locksfree 2009-09-30 08:52:09

11

我已經引用了一組沒有羞恥通過PHP的trim函數相匹配的空白字符(減去空字節,我不知道瀏覽器將如何處理它)。

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

雖然這看起來像不成熟的優化。

+4

+1用於過早優化。 – Glenn 2009-09-30 08:59:25

+0

看起來這比使用RegExp快一點:http://jsperf.com/whitespace-character – Azmisov 2013-07-09 04:33:44

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 2009-09-30 20:51:07

+3

請注意,自此之後,兩個鏈接頁面都已更新 - MSDN之一現在包含該空間,而Mozilla之一包含其他Unicode空白字符 – Christoph 2013-07-09 10:27:18

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

這個小功能可以讓你輸入一個可變長度的字符串作爲參數,它會報告「真實」如果第一個字符是空格否則爲「假」。您可以使用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 < < CH)&((CH - 64)>> 31)& 0x100002600L )!= 0L

+0

對不起,但這不是JavaScript。這是C.而且,這是一個關於JavaScript的問題。 – 2017-12-26 18:55:47