检查单个字符是否为空格的最佳方法是什么?
我知道如何通过正则表达式进行检查。
但如果我只有一个角色,我不确定这是否是最佳方式。
是否有更好的方法(关于性能)来检查它是否是空格?
如果我做这样的事情。我想错过选项卡这样的白色空间吗?
if (ch == ' ') {
...
}
答案 0 :(得分:40)
如果您只想测试某些空格字符,请手动执行,否则请使用正则表达式,即
/\s/.test(ch)
请注意,不同的浏览器会匹配不同的字符,例如在Firefox中,\s
相当于(source)
[ \f\n\r\t\v\u00A0\u2028\u2029]
而在Internet Explorer中,它应该是(source)
[ \f\n\r\t\v]
MSDN页面实际上忘记了空间;)
答案 1 :(得分:13)
我已经引用了PHP的trim函数匹配的空格字符集而没有羞耻(减去空字节,我不知道浏览器将如何处理它)。
if (' \t\n\r\v'.indexOf(ch) > -1) {
// ...
}
这看起来像我过早的优化。
答案 2 :(得分:12)
正则表达式方法是一条可行的方法。但是这就是我懒惰时所做的事情,忘记了正确的正则表达式语法:
str.trim() === '' ? alert('just whitespace') : alert('not whitespace');
答案 3 :(得分:7)
这包括空格,制表符和换行符:
if ((ch == ' ') || (ch == '\t') || (ch == '\n'))
这应该是性能最好的。首先,把你期望的空白字符放在最有可能的位置。
如果表现真的很重要,最好考虑比这样的个人操作更大的图片......
答案 4 :(得分:3)
虽然并不完全正确,但我使用了这种务实而快速的解决方案:
if (ch.charCodeAt(0) <= 32) {...
答案 5 :(得分:1)
var testWhite = (x) {
var white = new RegExp(/^\s$/);
return white.test(x.charAt(0));
};
这个小函数允许你输入一个可变长度的字符串作为参数,如果第一个字符是空格,则报告“true”,否则报告“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.
答案 6 :(得分:1)
@jake的答案-使用trim()
方法-是最佳选择。如果您将单个字符ch作为十六进制数字:
String.fromCharCode(ch).trim() === ""
对于所有空白字符将返回true。
不幸的是,像<=32
这样的比较不能捕获所有空白字符。例如; 0xA0
(不间断空格)在Javascript中被视为空格,但是它大于32。出于相同的原因,使用indexOf()
和类似"\t\n\r\v"
的字符串进行搜索将是不正确的。>
下面是一个简短的JS代码段,它说明了这一点:https://repl.it/@saleemsiddiqui/JavascriptStringTrim
答案 7 :(得分:0)
function hasWhiteSpace(s) {
return /\s/g.test(s);
}
这将起作用
或 您还可以使用以下indexOf():
function hasWhiteSpace(s) {
return s.indexOf(' ') >= 0;
}
答案 8 :(得分:-2)
这个怎么样: ((1L&lt;&lt; ch)&amp;((ch-64)&gt;&gt; 31)&amp; 0x100002600L)!= 0L