【问题标题】:Check if a string has white space检查字符串是否有空格
【发布时间】:2010-12-16 09:57:57
【问题描述】:

我正在尝试检查字符串是否包含空格。我找到了这个功能,但它似乎不起作用:

function hasWhiteSpace(s) 
{
    var reWhiteSpace = new RegExp("/^\s+$/");

    // Check for white space
    if (reWhiteSpace.test(s)) {
        //alert("Please Check Your Fields For Spaces");
        return false;
    }

    return true;
}

顺便说一句,我在RegExp 中添加了引号。

有什么问题吗?有什么更好的我可以使用的吗?希望是 JQuery。

【问题讨论】:

  • 你的逻辑是倒退的,真就是假。
  • 如果字符串有空格,您将返回 false,您的逻辑是向后的
  • 该正则表达式检查字符串中只有空格的模式,以空格开头,有一个或多个空格,并以空格结尾。

标签: javascript whitespace


【解决方案1】:

您可以简单地对输入字符串使用indexOf 方法:

function hasWhiteSpace(s) {
  return s.indexOf(' ') >= 0;
}

或者您可以在简单的正则表达式上使用测试方法:

function hasWhiteSpace(s) {
  return /\s/g.test(s);
}

这也将检查其他空白字符,如制表符。

【讨论】:

  • 这不会检查其他类型的空白(例如,\t)。
  • 你不能把 s.indexOf(/^\s+$/) 也放进去吗?
  • IE8 不支持此功能(仅供参考...)
  • @CMS& @Bernard - 不工作 [s.indexOf(' ') 工作]
【解决方案2】:

你的正则表达式不会匹配任何东西,因为它是。您肯定需要删除引号 - "/" 字符就足够了。

/^\s+$/ 正在检查字符串是否为 ALL 空格:

  • ^ 匹配字符串的开头。
  • \s+ 表示至少 1 个,可能更多个空格。
  • $ 匹配字符串的结尾。

尝试用/\s/(不加引号)替换正则表达式

【讨论】:

    【解决方案3】:

    test 方法是最好的方法。字符类\s 检查任何空白字符,包括空格、制表符、回车和换页。

    全局标志不是必需的,因为我们正在寻找单个匹配项。正则表达式文字比其构造函数等价物运行得更快,因为它们在运行时得到了更好的优化。

    function hasWhiteSpace(s) {
      return (/\s/).test(s);
    }
    
    console.log(hasWhiteSpace("Hello World!"));
    console.log(hasWhiteSpace("HelloWorld!"));
    
    console.time('hasWhiteSpace');
    for (let i = 0; i < 1_000_000; i++) {
      hasWhiteSpace("Some text here");
    }
    console.timeEnd('hasWhiteSpace');

    如果您只使用某些空白字符,您可以利用像 some 这样的数组方法,它会在第一次成功匹配时返回,但它们会比正则表达式的测试方法慢:

    // Use includes method on string
    function hasWhiteSpace(s) {
      const whitespaceChars = [' ', '\t', '\n'];
      return whitespaceChars.some(char => s.includes(char));
    }
    
    console.log(hasWhiteSpace("Hello World!"));
    console.log(hasWhiteSpace("HelloWorld!"));
    
    console.time('hasWhiteSpace');
    for (let i = 0; i < 1_000_000; i++) {
      hasWhiteSpace("Some text here");
    }
    console.timeEnd('hasWhiteSpace');

    正如您在性能基准测试中看到的那样,test 方法比 some 方法稍快,无论如何都不会被注意到。

    【讨论】:

      【解决方案4】:

      其他一些人已经发布了答案。有一些明显的问题,比如当正则表达式通过时它返回false^$ 运算符指示开始/结束,而问题是寻找有(任何)空格,而不是:只包含空格(正则表达式正在检查)。

      除此之外,问题只是一个错字。

      改变这个...

      var reWhiteSpace = new RegExp("/^\s+$/");
      

      到这里……

      var reWhiteSpace = new RegExp("\\s+");
      

      RegExp() 中使用正则表达式时,您必须执行以下两件事...

      • 省略开头和结尾的 / 括号。
      • 双重转义所有序列代码,即\\s代替\s

      来自源代码的完整工作演示......

      $(document).ready(function(e) { function hasWhiteSpace(s) {
              var reWhiteSpace = new RegExp("\\s+");
          
              // Check for white space
              if (reWhiteSpace.test(s)) {
                  //alert("Please Check Your Fields For Spaces");
                  return 'true';
              }
          
              return 'false';
          }
        
        $('#whitespace1').html(hasWhiteSpace(' '));
        $('#whitespace2').html(hasWhiteSpace('123'));
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      " ": <span id="whitespace1"></span><br>
      "123": <span id="whitespace2"></span>

      【讨论】:

        【解决方案5】:

        此函数检查其他类型的空白,而不仅仅是空格(制表符、回车等)

        import some from 'lodash/fp/some'
        const whitespaceCharacters = [' ', '  ',
          '\b', '\t', '\n', '\v', '\f', '\r', `\"`, `\'`, `\\`,
          '\u0008', '\u0009', '\u000A', '\u000B', '\u000C',
        '\u000D', '\u0020','\u0022', '\u0027', '\u005C',
        '\u00A0', '\u2028', '\u2029', '\uFEFF']
        const hasWhitespace = char => some(
          w => char.indexOf(w) > -1,
          whitespaceCharacters
        )
        
        console.log(hasWhitespace('a')); // a, false
        console.log(hasWhitespace(' ')); // space, true
        console.log(hasWhitespace(' ')); // tab, true
        console.log(hasWhitespace('\r')); // carriage return, true
        

        如果您不想使用Lodash,那么这里有一个简单的some 实现,带有2 个s

        const ssome = (predicate, list) =>
        {
          const len = list.length;
          for(const i = 0; i<len; i++)
          {
            if(predicate(list[i]) === true) {
              return true;
            }
          }
          return false;
        };
        

        然后只需将some 替换为ssome

        const hasWhitespace = char => some(
          w => char.indexOf(w) > -1,
          whitespaceCharacters
        )
        

        对于那些在 Node 中的,使用:

        const { some } = require('lodash/fp');
        

        【讨论】:

          【解决方案6】:

          我认为我们可以使用 includes()

          message :string = "Hello world";
          message2 : string = "Helloworld";
          
          message.includes(' '); // true
          message2.inlcudes(' ')// false
          

          【讨论】:

            【解决方案7】:

            您可以采用的一种简单方法是将原始字符串的长度与字符串的长度进行比较,以将空格替换为空。例如:

            const hasWhiteSpaces = (text: string) => text.length === text.replace(" ", "").length
            

            【讨论】:

              【解决方案8】:

              这是我建议的验证:

              var isValid = false;
              
              // Check whether this entered value is numeric.
              function checkNumeric() {
                  var numericVal = document.getElementById("txt_numeric").value;
              
                  if(isNaN(numericVal) || numericVal == "" || numericVal == null || numericVal.indexOf(' ') >= 0) {
                      alert("Please, enter a numeric value!");
                      isValid = false;
                  } else {
                      isValid = true;
                  }
              }
              

              【讨论】:

                【解决方案9】:
                function hasWhiteSpace(s) {
                  return s.includes(' ')
                }
                

                【讨论】:

                  猜你喜欢
                  • 2017-08-19
                  • 2015-08-22
                  • 2014-08-03
                  • 2011-03-19
                  • 1970-01-01
                  • 2022-06-25
                  • 1970-01-01
                  • 2015-06-10
                  相关资源
                  最近更新 更多