2011-02-07 10 views
55

Devo controllare alcune stringhe utilizzando JavaScript ma la distinzione tra maiuscole e minuscole causa problemi. per esempiojavascript confrontare stringhe senza maiuscole/minuscole

if('abc'=='ABC') 
{ 
return true; 
} 

non andrà all'interno del se ciclo anche se il significato della parola sono gli stessi. I cant utilizzare tolower clausola troppo dal momento che non so i dati come sarebbe venuto significa es:

if('aBc'=='abC') 
{ 
return true; 
} 

come scrivere la funzione JS per questo se potesse essere fatto da jQuery.

+1

La domanda già risposta ha informazioni molto migliori. Vi suggerisco (lettore corrente) di ignorare questa pagina –

risposta

111

È possibile rendere entrambi gli argomenti in minuscolo e in tal modo si finirà sempre con una ricerca senza distinzione tra maiuscole e minuscole.

var string1 = "aBc"; 
var string2 = "AbC"; 

if (string1.toLowerCase() === string2.toLowerCase()) 
{ 
    #stuff 
} 
+2

Nota: è necessario fare attenzione a applicare il codice solo in modo indiscriminato, poiché string1 == stringa2 restituirà true se entrambe le variabili sono nulle o false se solo una è nullo. Mentre string1.toLowerCase() == stringa2.toLowerCase() genera un errore se una variabile è nullo. –

+5

in realtà, come sottolineato nella domanda già risposta, NON dovresti usare '.toLowerCase()' ma '.toUpperCase()'.vedere http://stackoverflow.com/questions/2140627/javascript-case-insensitive-string-comparison e anche http://msdn.microsoft.com/en-us/library/bb386042.aspx –

+0

tre segno di uguale? === – Sandeep

4

Prova questo ...

if(string1.toLowerCase() == string2.toLowerCase()){ 
    return true; 
} 

Inoltre, non è un ciclo, è un blocco di codice. I loop sono generalmente ripetuti (sebbene possano essere eseguiti solo una volta), mentre un blocco di codice non si ripete mai.

Ho letto la tua nota sul non utilizzo di LowerCase, ma non riesco a capire perché sarebbe un problema.

8

È inoltre possibile utilizzare string.match().

var string1 = "aBc"; 
var match = string1.match(/AbC/i); 

if(match) { 
} 
+1

È anche possibile usare un'altra variabile invece di/AbC/part ???? –

+0

YeppThat'sMe: Sì, è possibile eseguire: var string1 = "aBc", regex =/AbC/i, match = string1.match (regex); Si noti che la corrispondenza sarà la parte della stringa che corrisponde a un'espressione regolare o null se l'espressione regolare non corrisponde a nulla. Pubblicherò una risposta alternativa che utilizza un diverso metodo regex per fare ciò. – Akrikos

+5

Si dovrebbe usare '/^abc$/i.test ("ABC")', perché senza l'ancora all'inizio e alla fine è davvero dicendo ** ** contiene, non ** ** equals. –

18

Un altro metodo che utilizza un'espressione regolare (questo è più corretto di risposta di Zachary):

var string1 = 'someText', 
    string2 = 'SometexT', 
    regex = new RegExp('^' + string1 + '$', 'i'); 

if (regex.test(string2)) { 
    return true; 
} 

RegExp.test() restituirà vero o falso.

Inoltre, aggiungendo il '^' (che indica l'inizio della stringa) all'inizio e '$' (indicando la fine della stringa) fino alla fine assicurati che l'espressione regolare corrisponda solo se 'sometext' è l'unico testo in stringToTest. Se stai cercando un testo che contenga un'espressione regolare, è giusto lasciarlo fuori.

Potrebbe essere più semplice utilizzare il metodo string.toLowerCase().

Quindi ... le espressioni regolari sono potenti, ma dovresti usarle solo se capisci come funzionano. Le cose inaspettate possono accadere quando usi qualcosa che non capisci.

Ci sono tonnellate di espressioni regolari "tutorial", ma la maggior parte sembra che stiano cercando di spingere un determinato prodotto. Ecco quello che sembra un tutorial decente ... Certo, è scritto per l'utilizzo di PHP, ma per il resto, sembra essere un bel tutorial per principianti: http://weblogtoolscollection.com/regex/regex.php

Questo sembra essere un buon strumento per testare le espressioni regolari: http://gskinner.com/RegExr/

+0

questa è la cosa migliore, anche se è opere per nulla, mentre toUpperCase o toLowerCase dà errore - estupendo –

+0

E se stringa1 non è modello regexp valida? Per eample 'new RegExp ('^ (a $', 'i')' –

+0

@Bohdan, l'invitiamo a provare questo genere di cose nella console js. Se lo fai, troverete che il vostro browser lancia uno SyntaxError, quindi non credo che sia rilevante in questo caso. – Akrikos

Problemi correlati