2009-09-30 39 views
23

¿Cuál es la mejor manera de verificar si un solo carácter es un espacio en blanco?comprobar si un solo carácter es un espacio en blanco?

Sé cómo marcar esto a través de una expresión regular.

Pero no estoy seguro de si esta es la mejor manera si solo tengo un solo carácter.

¿No hay una mejor manera (relacionada con el rendimiento) para comprobar si se trata de un espacio en blanco?

Si hago algo así, me perdería espacios en blanco como las fichas que quess ?: Si (CH == ' ') {} ....

+1

Uso ((c <= 32 && c > = 0) || c == 127).Obtiene todos los espacios en blanco y los caracteres de control en ascii. – nikdeapen

Respuesta

6

esto cubre espacios, tabuladores y saltos de línea :

if ((ch == ' ') || (ch == '\t') || (ch == '\n')) 

esto debería ser el mejor para el rendimiento. pon el carácter en blanco que esperas que sea más probable, primero.

si el rendimiento es realmente importante, probablemente el mejor para considerar el cuadro más grande que las operaciones individuales como este ...

+0

también hay '\ r' y '\ r \ n', pero yo diría que es mejor usar expresiones regulares que utilizar un si con 5 condiciones. Sería más rápido en mi opinión. – stefita

+0

bueno, siempre es mejor hacer un perfil en casos como este. dependiendo de cuán probable sea cada personaje, el cortocircuito de '||' podría hacerlo más rápido. – Peter

+1

Esto funcionaría isWhiteSpace (ch) {return "\ t \ n \ r \ v" .indexOf (ch)! = -1; } – Locksfree

11

he referido al conjunto de caracteres en blanco emparejados por la función de PHP trim sin vergüenza (menos el byte nulo, No tengo idea de qué tan bien los navegadores manejarán eso).

if (' \t\n\r\v'.indexOf(ch) > -1) { 
    // ... 
} 

Aunque esto me parece una optimización prematura.

+4

+1 para una optimización prematura. – Glenn

+0

Parece que esto es un poco más rápido que usar RegExp: http://jsperf.com/whitespace-character – Azmisov

29

Si sólo desea probar para ciertos caracteres de espacio en blanco, hacerlo de forma manual, de lo contrario, utilizar una expresión regular, es decir

/\s/.test(ch) 

Tenga en cuenta que los diferentes navegadores coinciden con diferentes caracteres, por ejemplo, en Firefox, \s es equivalente a (source)

[ \f\n\r\t\v\u00A0\u2028\u2029] 

mientras que en Internet Explorer, debe ser (source)

[ \f\n\r\t\v] 

La página de MSDN en realidad se olvidó el espacio;)

+0

@kangax: es bueno saberlo; al menos para IE, la documentación es coherente con el resultado real (falta espacio) – Christoph

+3

tenga en cuenta que ambas páginas enlazadas se han actualizado desde entonces: MSDN uno ahora incluye el espacio, y el de Mozilla incluye caracteres adicionales de espacio en blanco Unicode – Christoph

1
var testWhite = (x) { 
    var white = new RegExp(/^\s$/); 
    return white.test(x.charAt(0)); 
}; 

Esta pequeña función le permitirá introducir una cadena de longitud variable como un argumento y se informará "true" si el primer carácter es un espacio en blanco o "falso" de lo contrario. Puede poner cualquier carácter de una cadena en la función usando los métodos indexOf o charAt. Ejemplos:

var str = "Today I wish I were not in Afghanistan."; 
testWhite(str.charAt(9)); // This would test character "i" and would return false. 
testWhite(str.charAt(str.indexOf("I") + 1)); // This would return true. 
7

El enfoque regex es un camino sólido a seguir. Pero esto es lo que hago cuando estoy perezoso y olvida la sintaxis de expresiones regulares adecuada:

str.trim() === '' ? alert('just whitespace') : alert('not whitespace'); 
0

¿qué tal ésta: ((1L < < ch) & ((CH - 64) >> 31) & 0x100002600L)! = 0L

+0

Disculpe, pero eso no es javascript. Eso es C. Y, esta es una pregunta sobre javascript. –

Cuestiones relacionadas