【问题标题】:Detect if string contains any spaces检测字符串是否包含任何空格
【发布时间】:2013-07-11 02:19:50
【问题描述】:

如何检测字符串是否包含空格字符?

以下仅检测实际的空格字符。我需要检查任何类型的空白。

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

【问题讨论】:

  • 您所拥有的将检测任何空格字符,而不仅仅是单词之间。但是您想包含其他类型的空白吗?
  • console.log(' foo'.indexOf(' ') !== -1); 对我来说是真的,console.log(' '.indexOf(' ') !== -1) 也是如此。 console.log(''.indexOf(' ') !== -1) 记录为假,因为空字符串不包含空格。不知道 s 对你有什么作用,但 indexOf 应该可以工作
  • 单词之间只有空格?这就是空间所在。
  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地告诉你在问什么。
  • 我想检测字符串是否包含任何空格。

标签: javascript regex


【解决方案1】:

你会在字符串中找到一个空格任何地方,而不仅仅是单词之间。

如果你想找到任何类型的空格,你可以使用这个,它使用正则表达式:

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

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

According to 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]


出于某种原因,我最初将您的问题读作“如何查看字符串是否包含 only 个空格?”所以我回答了以下问题。但正如@CrazyTrain 指出的那样,这不是问题所说的。不过,我会留下它,以防万一……

如果你的意思是字面上的空格,正则表达式可以做到:

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

也就是说:匹配字符串的开头 (^),后跟零个或多个空格字符,然后是字符串的结尾 ($)。如果您不想匹配空字符串,请将 * 更改为 +

如果您将空白作为一般概念:

if (/^\s*$/.test(str)) {
    // It has only whitespace
}

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

【讨论】:

  • 这也将匹配空字符串。
  • @HamZa:我以为这是需要的。
  • T.J.,这真是又快又直!
  • @abhishah901: MDN is your friend(上面有链接)。或者你可以拿起你的狩猎帽和砍刀钻研the specification,但那里是一片丛林,但这是它的驯服部分之一。
  • @BKSpureon:不应该,假设您正在编辑 JavaScript 文件。这是一个简单而有效的陈述。
【解决方案2】:
var string  = 'hello world';
var arr = string.split(''); // converted the string to an array and then checked: 
if(arr[i] === ' '){
   console.log(i);
}

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

【讨论】:

    【解决方案3】:
    var inValid = new RegExp('^[_A-z0-9]{1,}$');
    var value = "test string";
    var k = inValid.test(value);
    alert(k);
    

    【讨论】:

    • 欢迎来到 Stack Overflow。回答问题很好,但这段代码的目的并不明确。如果它包含对它的作用以及它如何回答问题的解释,这个答案会更好。请edit回答。
    【解决方案4】:

    第二个选项是检查其他选项,没有空格 (\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 可视化正则表达式:

    【讨论】:

      【解决方案5】:
      function hasSpaces(str) {
        if (str.indexOf(' ') !== -1) {
          return true
        } else {
          return false
        }
      }
      

      【讨论】:

      • 有很多空白,与您刚刚使用空格键创建的空白不等价。因此您的代码不可靠。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2019-03-13
      相关资源
      最近更新 更多