检查字符串是否有空格

153

我想要检查一个字符串是否包含空格。我找到了这个函数,但它似乎不起作用:

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意味着false。 - Brian Schroth
2
如果字符串包含空格,你的逻辑是错误的,应该返回true。 - Christopher Francisco
该正则表达式检查字符串中只有空格的模式,以空格开头,有一个或多个空格,并以空格结尾。 - Priya Ranjan Singh
11个回答

344
你可以在输入字符串上简单使用indexOf方法:
function hasWhiteSpace(s) {
  return s.indexOf(' ') >= 0;
}

或者你可以在简单的正则表达式上使用 test 方法:

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

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


3
你能不能也加上 s.indexOf(/^\s+$/)? - Zoidberg
2
这不被IE8支持(友情提醒...) - gloomy.penguin
@CMS&@Bernard - 不起作用[s.indexOf(' ')有效] - Shawn Rebelo
@BernardChen,现在在2022年它确实可以工作了...请查看此链接以及链接右侧的解释:https://regex101.com/r/35I65w/1 - CodeConnoisseur

37

你的正则表达式现在无法匹配任何东西。你需要删除引号 -- "/" 字符已经足够了。

/^\s+$/ 检查字符串是否全部为空格:

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

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


11

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方法,不过这种差距并不明显。


5

如果您使用 ECMAScript6 (ES6) 或更新版本,则最简单的方法是:

// looking just for spaces   
function hasWhiteSpace(s) {
  return s.includes(' ');
}

上述函数存在一些限制:

  • 它只匹配空格,而不能匹配其他可能的空白字符,如制表符或换行符。
  • 它不支持正则表达式。

如果我们需要使用正则表达式来匹配所有可能的空白字符,我们可以使用自 ECMAScript1 (ES1) 起提供的 search 选项:

// looking for spaces, tabs, line breakers, etc. 
// live example: https://www.w3schools.com/jsref/jsref_regexp_whitespace.asp
function hasWhiteSpace(s) {
  return s.search(/\s/);
}

// looking just for spaces, equivalent to includes option
function hasWhiteSpace(s) {
  return s.search(/ /);
}

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


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>


2
我认为我们可以使用 includes()
message :string = "Hello world";
message2 : string = "Helloworld";

message.includes(' '); // true
message2.inlcudes(' ')// false

2

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

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,那么这里有一个用2个的简单实现方法:

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');

1
const checkEmpty = (title: string) => {
    let testString = title.replaceAll(" ", "");

    if (testString.length === 0) {
      return true;
    }
    return false;
  };

我正在使用以下方法检查输入是否只包含空格

您也可以使用'.includes'运算符来检查字符串中是否包含空格 :)


1

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

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

1
function hasWhiteSpace(s) {
  return s.includes(' ')
}

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