Verifique se uma string tem espaço em branco


95

Estou tentando verificar se uma string tem espaço em branco . Encontrei esta função, mas não parece estar funcionando:

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

A propósito, adicionei citações a RegExp.

Há algo de errado? Existe algo melhor que eu possa usar? Esperançosamente JQuery.


sua lógica está invertida, verdadeiro significa falso.
— Brian Schroth

2
Você está retornando falso se a string tiver espaço em branco, sua lógica está invertida
— Christopher Francisco

Essa regex em questão verifica se há padrões apenas com espaços em branco nas strings, começa com um espaço em branco, tem um ou mais espaços em branco e termina com um espaço em branco.
— Priya Ranjan Singh

Respostas:


240

Você pode simplesmente usar o método indexOf na string de entrada:

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

Ou você pode usar o método de teste, em um RegEx simples:

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

Isso também verificará outros caracteres de espaço em branco, como Tab.


17
isso não verifica outros tipos de espaço em branco (por exemplo, \ t).
— Bernard Chen

3
você não poderia colocar s.indexOf (/ ^ \ s + $ /) também?
— Zoidberg

2
isso não é suportado pelo IE8 (apenas um amigo para
— saber

@ CMS & @Bernard - Não funciona [s.indexOf ('') funciona]
— Shawn Rebelo

21

Sua regex não corresponderá a nada, do jeito que está. Você definitivamente precisa remover as aspas - os "/"caracteres são suficientes.

/^\s+$/está verificando se a string é TODOS os espaços em branco:

  • ^ corresponde ao início da string.
  • \s+ significa pelo menos 1, possivelmente mais, espaços.
  • $ corresponde ao final da string.

Tente substituir o regex por /\s/(e sem aspas)


1

Esta função verifica outros tipos de espaço em branco, não apenas espaço (tab, retorno de carro, etc.)

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

Se você não quiser usar o Lodash , aqui está uma someimplementação simples com 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;
};

Em seguida, basta substituir somepor ssome.

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

Para aqueles no Node, use:

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

0

Aqui está minha validação sugerida:

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

Uma abordagem simples que você pode adotar é comparar o comprimento da string original com o da string para substituir os espaços em branco por nada. Por exemplo:

function hasWhiteSpaces(string) {
    if (string.length == string.replace(" ", "").length) {return false}
    return true
}

0

Com adições ao idioma, é muito mais fácil, além disso, você pode aproveitar o retorno antecipado:

// Use includes method on string
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return whitespaceChars.some(char => s.includes(char));
}

// Use character comparison
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return Array.from(s).some(char => whitespaceChars.includes(char));
}

const withSpace = "Hello World!";
const noSpace = "HelloWorld!";

console.log(hasWhiteSpace(withSpace));
console.log(hasWhiteSpace(noSpace));

console.log(hasWhiteSpace2(withSpace));
console.log(hasWhiteSpace2(noSpace));

Eu não executei benchmark de desempenho, mas eles devem ser mais rápidos do que regex, mas para pequenos trechos de texto não haverá muita diferença de qualquer maneira.


0

Alguns outros postaram respostas. Existem alguns problemas óbvios, como ele retorna falsequando o Regex passa, e os operadores ^e $indicam início / fim, enquanto a pergunta está procurando tem (qualquer) espaço em branco, e não: contém apenas espaços em branco (que o regex está verificando).

Além disso, o problema é apenas um erro de digitação.

Mude isso...

var reWhiteSpace = new RegExp("/^\s+$/");

Para isso...

var reWhiteSpace = new RegExp("\\s+");

Ao usar uma regex dentro RegExp(), você deve fazer as duas coisas a seguir ...

  • Omita os /colchetes inicial e final .
  • Faça um escape duplo do código de todas as sequências, ou seja, \\sno lugar de \setc.

Demonstração de trabalho completa do código-fonte ....

$(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>

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.