2009-09-30 18 views
23

Qual è il modo migliore per verificare se un singolo carattere è uno spazio bianco?controlla se un singolo carattere è uno spazio bianco?

So come controllare attraverso un'espressione regolare.

Ma non sono sicuro se questo è il modo migliore se ho un solo carattere.

Non c'è un modo migliore (relativo alle prestazioni) per verificare se si tratta di uno spazio bianco?

Se faccio qualcosa di simile, mi mancherebbe spazi bianchi come tabulazioni Credo the ?: se (ch == ' ') { .... }

+1

Io uso ((c <= 32 && c > = 0) || c == 127).Ottiene tutti gli spazi bianchi e controlla i caratteri in ascii. – nikdeapen

risposta

6

questo copre spazi, tabulazioni e ritorni a capo :

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

questo dovrebbe essere il migliore per le prestazioni. metti il ​​carattere dello spazio bianco che ti aspetti di essere più probabile, in primo luogo.

se le prestazioni sono veramente importante, probabilmente è meglio considerare il quadro più grande di operazioni singole come questo ...

+0

ci sono anche '\ r' e '\ r \ n', ma direi che è meglio usare regex che usare un if con 5 condizioni. Sarebbe più veloce secondo me. – stefita

+0

beh, è ​​sempre meglio profilare casi come questo. a seconda della probabilità di ogni personaggio, il cortocircuito di '||' potrebbe effettivamente renderlo più veloce. – Peter

+1

Questo dovrebbe fare function isWhiteSpace (ch) {return "\ t \ n \ r \ v" .indexOf (ch)! = -1; } – Locksfree

11

ho fatto riferimento il set di caratteri di spazio bianco abbinati alla funzione di PHP trim senza vergogna (meno il byte null, Non ho idea di quanto bene i browser lo gestiranno).

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

Questo mi sembra un'ottimizzazione prematura.

+4

+1 per l'ottimizzazione prematura. – Glenn

+0

Sembra che questo sia un po 'più veloce rispetto all'utilizzo di RegExp: http://jsperf.com/whitespace-character – Azmisov

29

Se solo si desidera verificare per alcuni caratteri di spazio bianco, farlo manualmente, in caso contrario, usare un'espressione regolare, vale a dire

/\s/.test(ch) 

Tenete a mente che i vari browser corrispondono caratteri diversi, ad esempio in Firefox, \s è equivalente a (source)

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

mentre in Internet Explorer, che dovrebbe essere (source)

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

La pagina di MSDN in realtà dimenticato lo spazio;)

+0

@kangax: bello sapere; almeno per IE, la documentazione è coerente con il risultato effettivo (spazio mancante a parte) – Christoph

+3

nota che entrambe le pagine collegate sono state aggiornate da allora - l'MSDN ne include ora lo spazio, e quello di Mozilla include caratteri aggiuntivi di spazi bianchi Unicode – Christoph

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

Questa piccola funzione consente di inserire una stringa di lunghezza variabile come un argomento e segnalerà "true" se il primo carattere è uno spazio bianco o "falso" altrimenti. Puoi facilmente inserire qualsiasi carattere da una stringa nella funzione usando i metodi indexOf o charAt. Esempi:

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

L'approccio regex è una soluzione solida. Ma ecco quello che faccio quando sono pigro e dimenticare la sintassi corretta regex:

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

come circa questo: ((1L < < ch) & ((CH - 64) >> 31) & 0x100002600L)! = 0L

+0

Spiacente, ma quello non è javascript. Questo è C. E questa è una domanda su javascript. –

Problemi correlati