2011-02-07 22 views
55

Muszę sprawdzić niektóre łańcuchy przy użyciu JavaScript, ale rozróżnianie wielkości liter powoduje problemy. npPorównywanie ciągów javascript bez rozróżniania wielkich i małych liter

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

nie przejdzie wewnątrz pętli, jeżeli choć znaczenie słowa są takie same. nie mogę używać tolower klauzuli zbyt ponieważ nie wiem w jaki sposób dane będą pochodzić Oznacza to dla ex:

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

jak napisać funkcję JS do tego, czy można to zrobić przez jQuery.

+1

Już udzielone pytanie ma o wiele więcej informacji. Proponuję, abyś (obecny czytelnik) zignorował tę stronę. –

Odpowiedz

111

Możesz uczynić oba argumenty małymi literami i w ten sposób zawsze otrzymasz wyszukiwanie bez rozróżniania wielkości liter.

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

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

Uwaga: Musisz uważać na to, by po prostu bezkrytycznie stosować to do kodu jako string1 == ciąg2 zwróci wartość true, jeśli obie zmienne mają wartość null lub false, jeśli tylko jedna ma wartość null. Natomiast string1.toLowerCase() == string2.toLowerCase() spowoduje błąd, jeśli zmienna ma wartość NULL. –

+5

w rzeczywistości, jak wskazano w już udzielonym pytaniu, NIE należy używać '.toLowerCase()', ale '.toUpperCase()'.zobacz http://stackoverflow.com/questions/2140627/javascript-case-insensitive-string-comparison, a także http://msdn.microsoft.com/en-us/library/bb386042.aspx –

+0

znak równości? === – Sandeep

4

Spróbuj tego ...

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

Ponadto, nie jest to pętla, to blok kodu. Pętle są generalnie powtarzane (chociaż mogą być wykonywane tylko raz), podczas gdy blok kodu nigdy się nie powtarza.

Przeczytałem twoją notatkę o tym, że nie używam doLowerCase, ale nie widzę powodu, dla którego byłby to problem.

8

Możesz także użyć string.match().

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

if(match) { 
} 
+1

Czy można również użyć innej zmiennej zamiast/AbC/part ???? –

+0

YeppThat'sMe: Tak, możesz zrobić: var string1 = "aBc", regex =/AbC/i, match = string1.match (regex); Pamiętaj, że dopasowanie będzie częścią ciągu pasującego do wyrażenia regularnego lub wartością null, jeśli wyrażenie regularne nie pasuje do niczego. Opublikuję alternatywną odpowiedź, która używa innej metody wyrażeń regularnych, aby to zrobić. – Akrikos

+5

Powinieneś użyć '/^abc$/i.test (" aBc ")' ponieważ bez zakotwiczenia na początku i końcu mówi się tak naprawdę ** zawiera **, nie ** jest równe **. –

18

Inną metodą za pomocą wyrażenia regularnego (to jest więcej niż poprawna odpowiedź Zachary'ego):

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

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

RegExp.test() zwróci true lub false.

Dodanie "^" (oznaczającego początek ciągu) do początku i "$" (oznaczające koniec ciągu) do końca zapewniają, że wyrażenie regularne będzie pasowało tylko wtedy, gdy "sometext" jest jedynym tekstem w stringToTest. Jeśli szukasz tekstu zawierającego wyrażenie regularne, możesz je wyłączyć.

Może być łatwiejsze użycie metody string.toLowerCase().

Więc ... wyrażenia regularne są potężne, ale powinieneś ich używać tylko wtedy, gdy rozumiesz, jak działają. Nieoczekiwane rzeczy mogą się zdarzyć, gdy używasz czegoś, czego nie rozumiesz.

Istnieje wiele "samouczków" z wyrażeniami regularnymi, ale większość wydaje się próbować przepchnąć określony produkt. Oto, co wygląda godnej samouczka ... przyznane, on napisany dla używając php, ale poza tym, to wydaje się być miłym poradnik dla początkujących: http://weblogtoolscollection.com/regex/regex.php

To wydaje się być dobrym narzędziem do testowania wyrażeń regularnych: http://gskinner.com/RegExr/

+0

ten jest najlepszy, nawet jeśli działa na wartość zerową, podczas gdy toUpperCase lub toLowerCase daje błąd - estupendo –

+0

Co się stanie, jeśli ciąg1 nie jest prawidłowym wzorcem regexp? Dla przykładu 'new RegExp ('^ (a $', 'i')' –

+0

@ Bohdan, zachęcam cię do wypróbowania tego typu rzeczy w konsoli js. Jeśli to zrobisz, przekonasz się, że twoja przeglądarka zgłasza błąd SyntaxError, więc nie sądzę, że jest to istotne w tym przypadku: – Akrikos

Powiązane problemy