2009-11-13 10 views
68

Estoy tratando de comprobar si una cadena tiene espacio en blanco. He encontrado esta función, pero no parece estar funcionando:Compruebe si una cadena tiene espacio en blanco

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

Por cierto, he añadido las comillas para RegExp.

¿Hay algo malo? ¿Hay algo mejor que pueda usar? Espero que JQuery.

+2

usted está volviendo falsa si la cadena tiene un espacio en blanco, su lógica es al revés –

Respuesta

184

Usted puede simplemente utilizar el método indexOf en la cadena de entrada:

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

O puede utilizar el método de ensayo, en una simple expresión regular:

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

Esto también va a buscar otra blanca caracteres de espacio como Tab.

+14

esto no comprueba para otros tipos de espacios en blanco (por ejemplo, \ t). –

+2

¿no podría poner en el índice de (/^\ s + $ /) también? – Zoidberg

+0

Bernard: Tienes razón, agregué una alternativa de expresiones regulares. – CMS

1

su lógica está al revés, verdadero significa falso.

17

Su expresión regular no coincidirá con nada, ya que es. Definitivamente debe eliminar las comillas: los caracteres "/" son suficientes.

/^\s+$/ es comprobar si la cadena es TODOS los espacios en blanco:

  • ^ coincide con el inicio de la cadena.
  • \s+ significa al menos 1, posiblemente más, espacios.
  • $ coincide con el final de la cadena.

intentar sustituir la expresión regular con /\s/ (y sin comillas)

1

Aquí está mi validación 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

Esta función comprueba si hay otros tipos de espacios en blanco, no sólo el espacio (pestaña, carro retorno, 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 

Si no desea utilizar Lodash, entonces aquí es una sencilla aplicación con somes 2:

const ssome = (predicate, list) => 
{ 
    const len = list.length; 
    for(const i = 0; i<len; i++) 
    { 
    if(predicate(list[i]) === true) { 
     return true; 
    } 
    } 
    return false; 
}; 

A continuación, basta con sustituir some con ssome.

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

Para aquellos en el Nodo, utilice:

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