检查字符串是否有空格

我正在尝试 检查字符串是否有空格。我找到了这个函数,但它似乎没有工作:

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。

359338 次浏览

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

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

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

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

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

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

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

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

尝试将 regex 替换为 /\s/(不带引号)

以下是我的建议:

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

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

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

那就用 ssome代替 some

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

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

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

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

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

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方法稍微快一些,这是不会引起注意的。

其他一些人已经发布了答案。有一些明显的问题,比如当正则表达式通过时返回 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>

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

我想我们可以用 包括()

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


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

如果您正在使用 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(/ /);
}

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

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


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


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