检查字符串是否有空格


95

我正在尝试检查字符串是否有空格。我发现了此功能,但似乎无法正常工作:

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。


您的逻辑倒退,true表示错误。
布赖恩·史罗斯

2
如果字符串具有空格,则返回假,则逻辑倒退
Christopher Francisco

该正则表达式检查字符串中仅包含空格的模式,以空格开头,具有一个或多个空格,最后以空格结尾。
Priya Ranjan Singh

Answers:


240

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

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

或者,您可以在简单的RegEx上使用测试方法:

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

这还将检查其他空格字符,例如Tab。


17
这不会检查其他类型的空格(例如\ t)。
Bernard Chen

3
您不能也输入s.indexOf(/ ^ \ s + $ /)吗?
Zoidberg

2
IE8不支持此功能(只是友好的合作
伙伴

@ CMS&@Bernard-不起作用[s.indexOf('')有效]
Shawn Rebelo

21

您的正则表达式将不匹配任何内容。您绝对需要删除引号- "/"字符已足够。

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

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

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


1

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

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;
};

然后只需替换somessome

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

对于Node中的用户,请使用:

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

0

这是我建议的验证:

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;
    }
}

0

您可以采用的一种简单方法是将原始字符串的长度与字符串的长度进行比较,以使空白处不包含任何空白。例如:

function hasWhiteSpaces(string) {
    if (string.length == string.replace(" ", "").length) {return false}
    return true
}

0

通过添加语言,它变得更加容易,而且您可以利用提前返回的优势:

// Use includes method on string
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return whitespaceChars.some(char => s.includes(char));
}

// Use character comparison
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return Array.from(s).some(char => whitespaceChars.includes(char));
}

const withSpace = "Hello World!";
const noSpace = "HelloWorld!";

console.log(hasWhiteSpace(withSpace));
console.log(hasWhiteSpace(noSpace));

console.log(hasWhiteSpace2(withSpace));
console.log(hasWhiteSpace2(noSpace));

我没有运行性能基准测试,但是它们应该比正则表达式更快,但是对于小文本片段而言,它们之间并没有太大的区别。


0

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

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

改变这个...

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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.