Quando dobbiamo usare le espressioni regolari in jQuery?

Quando dobbiamo usare le espressioni regolari in jQuery?

Quando usare le espressioni regolari? Questa è una domanda che molto spesso ci poniamo quando si tratta di operare una scelta tra performance ed efficienza. In realtà la scelta è spesso molto semplice. E jQuery non fa eccezione.

Un espressione regolare in JavaScript richiede sempre un consumo di risorse maggiore rispetto ai semplici metodi di manipolazione delle stringhe. In JavaScript sia le espressioni regolari letterali che quelle create con il costruttore RegExp devono essere interpretate a fronte di un'operazione di pattern matching.

Questa operazione cresce in complessità man mano che il pattern usato diventa complesso. E maggiore è la lunghezza della stringa su cui effettuare l'operazione maggiore saranno le risorse impegnate dal browser.

Se avete notato cosa è successo con la versione 3.7 di WordPress capirete subito la situazione: questa versione ha introdotto un nuovo misuratore di robustezza delle password. Provate ad inserire una password molto lunga e vedrete come il tempo di attesa tra l'inserimento e la comparsa del messaggio sia notevolmente aumentato. Il motivo è semplice: l'espressione regolare è aumentata in complessità e i tempi di esecuzione aumentano in modo direttamente proporzionale alla lunghezza della stringa da testare.

Questo può diventare un serio problema a livello di performance se utilizzate una validazione di tipo inline: se associate un evento keyup ad una textarea e provate a verificare l'inserimento di caratteri non consentiti, avrete un pattern matching ad ogni carattere digitato. Quindi se l'utente inserisce 500 caratteri avrete 500 diversi pattern matching per sessione. Se poi associate anche un evento paste e l'utente inserisce direttamente il testo avrete un potenziale problema: se il testo è molto lungo, anche browser come Chrome potrebbero andare in blocco ( come ho notato per il password strength meter in WordPress 3.7 ).

Questo problema si risolve molto semplicemente non utilizzando le espressioni regolari:


$( "textarea" ).on( "keyup", function() {
	var value = $( this ).val();
	var illegalChars = [ ">", "<", "&" ];
	if( $.inArray( value, illegalChars ) != -1 ) {
		// errore
	}
});

Tornando alla nostra domanda fondamentale, la risposta è questa: se esiste un'alternativa senza le espressioni regolari, allora dobbiamo sempre utilizzare questa alternativa perché sicuramente più semplice e performante.

Torna su