domenica 22 settembre 2013

Ricerca in una stringa JavaScript

Problema

Vuoi sapere se una sottostringa è presente in una data stringa.

Soluzione

Utilizza il metodo .indexOf() dell'oggetto String per trovare l'indice a cui si trova la sottostringa, se esiste:

var testo = 'Questa è una frase di esempio';
var daCercare = 'una';

var result = testo.indexOf(daCercare); // 9

if(result != -1) {
    // la sottostringa esiste
} else {
    // la sottostringa non è stata trovata
}

Discussione

Il metodo .indexOf() restituisce un numero che rappresenta l'indice ovvero la posizione del primo carattere della sottostringa. Ricordati che il primo carattere della stringa corrisponde al numero zero, quindi nell'esempio la sottostringa inizia dal decimo carattere.

Per verificare se la sottostringa non esiste, basta confrontare il valore restituito con -1, valore che indica il fatto che la sottostringa non è stata trovata.

Il metodo .indexOf() prende in ingresso due parametri: la sottostringa e un secondo parametro opzionale, l'indice numerico da cui iniziare la ricerca:

var testo = "Ciccio formaggio è nato di maggio"

testo.indexOf('maggio') // 10

testo.indexOf('maggio',11) // 27

Oltre a .indexOf(), esiste anche il metodo .lastIndexOf() che ha lo stesso comportamento e firma, ma comincia da destra anziché da sinistra

sabato 21 settembre 2013

Come confrontare le stringhe in JavaScript?

Problema

Vuoi confrontare due stringhe per decidere se sono uguali.

Soluzione

Usa l'operatore ==:

var nome = prompt("Come ti chiami?", "");

if(nome == 'Ciccio') {
    alert('Bene!')
} else {
    alert('Non ti chiami Ciccio!');
}

Discussione

Due stringhe vengono confrontate con l'operatore ==. Quando questo operatore viene utilizzato in un test condizionale, il blocco di codice che segue viene eseguito solo se il test è vero (le stringhe sono uguali):

if(nome == 'Ciccio') {
    //Questo alert viene eseguito
    alert('Ti chiami Ciccio');
}

Se le stringhe non sono uguali, ed è presente il blocco else, sarà quest'ultimo ad essere eseguito:

if(nome == 'Ciccio') {
    //Questo NON viene eseguito    
    alert('Bene!')
} else {
    //Questo viene eseguito
    alert('Non ti chiami Ciccio!');
}

Ci sono diversi fattori che possono influenzare l'uguaglianza di due stringhe. Per esempio, le stringhe potrebbero essere uguali, ma differire per una lettera maiuscola/minuscola come nel caso "Ciccio/ciccio".

In questi casi conviene convertire tutte le lettere in maiuscole o minuscole utilizzando i metodi .toUpperCase() e .toLowerCase() rispettivamente, e poi effettuare il confronto.

if(nome.toLowerCase() == 'CICCIO') {
    alert('Bene!')
} else {
    alert('Non ti chiami Ciccio!');
} 

Cosa succede se confrontiamo un numero con una stringa? Ad esempio se avessimo:

25 == "25" //vero

Questo codice risulta vero perché viene effettuato un cast (ovvero una conversione automatica) del numero alla stringa "25".

Ci sono volte in cui potresti non volere questa conversione automatica e sapere se effettivamente due oggetti sono identici. In questi casi devi utilizzare l'operatore ===:

25 === "25" //falso

A volte potresti voler sapere quando due stringhe non sono uguali. In questi casi devi utilizzare gli operatori != e !==. Questi operatori funzionano allo stesso modo degli operatori di uguaglianza, solamente verificano se gli oggetti sono diversi:

25 !== "25" //vero

Puoi utilizzare anche gli operatori minore e maggiore per confrontare le stringhe.

'ala' < 'barca' //vero
'erba' > 'cena' //vero

Non c'è differenza tra maggiore (>) e maggiore o uguale (>=). Questo vale anche per gli operatori minore (<) e minore o uguale (<=).

venerdì 20 settembre 2013

Come concatenare le stringhe in JavaScript?

Problema

Vuoi unire due o più stringhe in una

Soluzione

Concatena le stringhe utilizzando l'operatore più (+):

var string1 = "Ciao, sono una ";
var string2 = "stringa";
//Crea una nuova stringa contenente "Ciao, sono una stringa"
var string3 = string1 + string2