检测字符串中是否包含空格

50

如何检测一个字符串中是否包含任何空格字符?

下面的代码只能检测实际空格字符。我需要检查任何类型的空格符。

if(str.indexOf(' ') >= 0){
    console.log("contains spaces");
}

4
您现有的内容将检测任何空格字符,而不仅仅是单词之间的空格。但您是否希望包括其他类型的空白字符? - user2437417
3
对我来说,console.log(' foo'.indexOf(' ') !== -1)console.log(' '.indexOf(' ') !== -1) 都会输出 true。而 console.log(''.indexOf(' ') !== -1) 则会输出 false,因为空字符串不包含空格。我不知道你的s变量中存储了什么,但是 indexOf 应该可以正常工作。 - Elias Van Ootegem
6
只有单词之间才有空格?那就是空格存在的地方。 - Joel Anair
2
请澄清您的具体问题或添加额外细节,以准确突出您所需的内容。目前的描述不够明确,很难确切地了解您的问题所在。 - HamZa
1
我想检测字符串是否包含任何空格。 - Malcr001
显示剩余4条评论
5个回答

135

你要查找的是字符串中的任何空格,而不仅仅是单词之间的空格。

如果你想查找任何类型的空白字符,可以使用正则表达式:

if (/\s/.test(str)) {
    // It has any kind of whitespace
}

\s代表“任何空格字符”(空格、制表符、垂直制表符、换页符、换行符等),并且可以在字符串中的任何位置找到该字符。

根据MDN的说法,\s等同于:[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​​\u202f\u205f​\u3000]


由于某种原因,我最初将您的问题解读为“如何查看字符串是否仅包含空格?”因此,我以下面的答案回答了这个问题。但是正如@CrazyTrain指出的那样,这不是问题的要求。但为了保险起见,我还是保留了它...

如果您确实指的是空格,那么可以使用正则表达式:

if (/^ *$/.test(str)) {
    // It has only spaces, or is empty
}

那是说:匹配字符串开头(^),后跟零个或多个空格字符,后跟字符串结尾($)。如果不想匹配空字符串,则将*更改为+
如果您指的是空格作为一般概念:
if (/^\s*$/.test(str)) {
    // It has only whitespace
}

这里使用的是 \s(空白字符),而不是空格,但其他方面与之相同。(如果您不想匹配空字符串,请将 * 更改为 +。)


1
这也将匹配空字符串。 - HamZa
1
@HamZa:我以为那是想要的。 - T.J. Crowder
1
T.J.,你的速度真快,而且很直接! - Ilia
2
@abhishah901: MDN是你的好朋友(链接在上面)。或者你可以戴上你的军帽和开路刀,深入规范,但那里是一个丛林,不过这是其中比较温和的部分之一。 - T.J. Crowder
1
@BKSpurgeon:假设您正在编辑JavaScript文件,那么它不应该有问题。这是一个简单而有效的陈述。 - T.J. Crowder
显示剩余2条评论

4
function hasSpaces(str) {
  if (str.indexOf(' ') !== -1) {
    return true
  } else {
    return false
  }
}

你的代码中有很多空格,这些空格与你用空格键输入的空格不相等,因此你的代码不可靠。 - Logan Lee

1
var inValid = new RegExp('^[_A-z0-9]{1,}$');
var value = "test string";
var k = inValid.test(value);
alert(k);

9
欢迎来到 Stack Overflow。回答问题是好的,但这段代码的目的不清楚。如果能够解释一下它的作用以及如何回答问题,那么这个答案会更好。请编辑回答。 - AdrianHHH

1
第二个选项是使用不含空格的方式进行检查 (\S),使用类似以下表达式的方式:
^\S+$

测试

function has_any_spaces(regex, str) {
 if (regex.test(str) || str === '') {
  return false;
 }
 return true;
}

const expression = /^\S+$/g;
const string = 'foo  baz bar';

console.log(has_any_spaces(expression, string));

在这里,我们可以将没有空格的字符串推入数组中,例如使用push函数:

const regex = /^\S+$/gm;
const str = `
foo
foo baz
bar
foo baz bar
abc
abc abc
abc abc abc
`;
let m, arr = [];

while ((m = regex.exec(str)) !== null) {
 // This is necessary to avoid infinite loops with zero-width matches
 if (m.index === regex.lastIndex) {
  regex.lastIndex++;
 }

 // Here, we push those strings without spaces in an array
 m.forEach((match, groupIndex) => {
  arr.push(match);
 });
}
console.log(arr);


如果您想简化/修改/探索表达式,可以在regex101.com的右上方面板中找到解释。如果您愿意,您还可以观看this link,了解它如何与一些示例输入匹配。

正则表达式电路

jex.im 可视化正则表达式:

enter image description here


0
var string  = 'hello world';
var arr = string.split(''); // converted the string to an array and then checked: 
if(arr[i] === ' '){
   console.log(i);
}

我知道正则表达式也可以解决这个问题!


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