Como posso verificar se a string contém caracteres e espaços em branco, não apenas espaços em branco?


134

Qual é a melhor maneira de verificar se uma string contém apenas espaço em branco?

É permitido que a string contenha caracteres combinados com espaços em branco, mas não apenas espaços em branco.

Respostas:


293

Em vez de verificar a sequência inteira para ver se há apenas espaço em branco, verifique se há pelo menos um caractere sem espaço em branco:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
Apenas tenha cuidado com myString para ter um valor nulo. Ele retornará true: /\S/.test(null) == true
Dilshod Tadjibaev

6
Muitas dessas respostas têm expressões regulares! Isso significa que não há maneira nativa de detectar coisas em js? não há nenhuma string.IsWhitespace ou algo assim? Também não existe uma guarnição nativa?
9134 JonnyRaa

4
@JonnyLeeds Desde regex ainda tem o apoio de sintaxe em js, pode-se dizer que é realmente mais nativa do que quaisquer métodos utilitários embarcados;)
Ricardo van den Broek

38

Resposta mais simples se o seu navegador suportar a trim()função

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

Atualmente, quando o IE 8 é RIP, essa é a solução mais limpa e eficiente em termos de desempenho, dependendo da implementação nativa. E funciona corretamente com guias e novas linhas.
Alexander Abakumov

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

isso verifica se há 1 ou mais caracteres de espaço em branco, se você também corresponder a uma sequência vazia, substitua-o +por *.


18

Bem, se você estiver usando jQuery, é mais simples.

if ($.trim(val).length === 0){
   // string is invalid
} 

1
Também funciona para nova linha e guia, enquanto os exemplos de expressões regulares acima não funcionam, pois procuram apenas a ausência de qualquer coisa, exceto espaço em branco. No entanto, tenho certeza de que alguém com algum conhecimento sobre regex pode criar um regex que também inclua tab / newline na pesquisa.
26416 Kate

não funciona quando val é atribuído a espaços, no meu caso quatro espaços.
user1451111

7

Basta verificar a string nesse regex:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
A maneira como leio a pergunta é dizer que / any / whitespace é permitido, desde que a string não seja / only / whitespace. É omisso o que fazer se a string estiver vazia, por isso pode ser que a resposta do nickf ainda seja melhor.
Ian Clelland

1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');

0

A expressão regular que eu acabei usando para quando eu quero permitir espaços no meio da minha string, mas não no começo ou no final foi essa:

[\S]+(\s[\S]+)*

ou

^[\S]+(\s[\S]+)*$

Então, eu sei que essa é uma pergunta antiga, mas você pode fazer algo como:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

ou você pode fazer o que o nickf disse e usar:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

Eu usei o método a seguir para detectar se uma string contém apenas espaço em branco. Também corresponde a cadeias vazias.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

Esta pode ser uma solução rápida

return input < "\u0020" + 1;

Isso é apenas fazer O return input < " 1"; que é apenas fazer comparação alfabética. Desde que a entrada seja classificada abaixo de "1", ela retornará true. Exemplo: return " asdfv34562345" < "\u0020" + 1;avalia como verdadeiro.
Derek Ziemba
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.