2009-09-30 39 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