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.

patad
fonte

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
}
nickf
fonte
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
}
Pilha completa
fonte
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 *.

Paul Creasey
fonte
18

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

if ($.trim(val).length === 0){
   // string is invalid
} 
Dayson
fonte
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");
}
Ian Clelland
fonte
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');
fino
fonte
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
}
Will Strohmeier
fonte
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
}
Rajat Saxena
fonte
0

Esta pode ser uma solução rápida

return input < "\u0020" + 1;
9me
fonte
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