如何在JavaScript中检查字符串是否只包含空格

10
在我的代码中,我需要写一个if else块 -
when the variable `currentValue` is holding only spaces -> certain code

但我不知道如何编写这个条件,因为currentValue可以是任何大小的字符串。它可以包含" "" "等。 如果我编写currentValue!=" ",它只会检查单个空格。


你是指精确的空格(字符32),还是任何空白符(行末、制表符等)? - georg
你可能应该尝试在谷歌上搜索类似于“javascript匹配字符串”的内容。 - 1983
4个回答

25

可以看起来像

if( !currentValue.trim().length ) {
    // only white-spaces
}

文档:trim

即使它非常易于理解;由currentValue引用的字符串将被修剪,这基本上意味着在开头和结尾处所有的空白字符都将被移除。如果整个字符串只包含空格字符,则完全被清除,这反过来意味着结果的length0!0将是true

关于性能,我将此解决方案与@mishik的RegExp方法进行了比较。结果表明,在FireFox中,.trim()要快得多,而在Chrome中,RegExp似乎要快得多。

http://jsperf.com/regexp-vs-trim-performance


也许是因为IE < 9缺乏支持,谁知道呢。不过,shim String.prototype.trim很简单,甚至编写一条解释downvote的评论更简单。 - 1983
1
代码本身没有问题,但是在处理长度为零的字符串时可能会出现问题。如果字符串中根本没有空格,且其值为"",那么情况就完全不同了。因此,可以这样写:if( !"".trim().length ) { /* 含有空格和长度为零的字符串 */ } - armen
@Armen 可能会有意义的区别,但空字符串确实只包含空格字符。也就是说,空字符串中的每个字符都是空格字符。 - Joshua Taylor

9

简而言之:

if (/^\s*$/.test(your_string)) {
  // Only spaces
}

仅匹配 空格

if (/^ *$/.test(your_string)) {
  // Only spaces
}

解释: /^\s*$/ - 匹配字符串开头,然后任意数量的空格(空格、换行符、制表符等),然后匹配字符串结尾。 /^ *$/ - 相同,但仅适用于空格。
如果您不想匹配空字符串:请将*替换为+以确保至少存在一个字符。

1
这也匹配空字符串,以及换行符和制表符。 - 1983

0
可以使用正则表达式来检查字符串是否不包含任何非空格字符。这种方法最多只会检查每个字符一次,并且在遇到非空格字符时会尽早退出。
if(!/\S/.test(str)){
   console.log('str contains only whitespace');
}

我们也可以使用 String#trim 来删除字符串开头和结尾的所有空格。如果字符串只包含空格,则结果将是一个空字符串,这是 falsy

if(!str.trim()){
    console.log('str contains only whitespace');
}

如果字符串可能为null或undefined,则可以使用可选链运算符
if(!str?.trim()){
    console.log('str is null or undefined, or contains only whitespace');
}

-1

尝试:

your_string.split(" ").length

编辑:

var your_string = "               ";
var x = your_string.split(" ").length - 1;

if ( your_string.length > 0 && (your_string.length - x) == 0 ) {
    alert("your_string has only spaces");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接