检查字符串是否有空格

问题描述 投票:0回答:12

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

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。

javascript whitespace
12个回答
345
投票

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

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

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

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

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


37
投票

您的正则表达式不会匹配任何内容,因为它是。您肯定需要删除引号 -

"/"
字符就足够了。

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

  • ^
    匹配字符串的开头。
  • \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
方法稍快,无论如何都不会被注意到。


6
投票

如果您使用 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
投票

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

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

2
投票

我想我们可以使用 includes()

message :string = "Hello world";
message2 : string = "Helloworld";

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

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

1
投票

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

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

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

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

这就是我用来检查输入是否仅包含空格的方法 您还可以使用 '.includes' 运算符来检查字符串中是否包含空格:)


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 containsSpaces(inputString) {
    return /\s/.test(inputString);
}

// Example usage:
console.log(containsSpaces("Hello World")); // Output: true
console.log(containsSpaces("HelloWorld")); // Output: false
console.log(containsWhitespace('hello\tworld')); // Output: true
console.log(containsWhitespace('hello\nworld')); // Output: true
© www.soinside.com 2019 - 2024. All rights reserved.