Jak mogę sprawdzić, czy litera w ciągu ma wielkie lub małe litery za pomocą JavaScript?
javascript
Joe
źródło
źródło
[:upper:]
) jest szybki i bardzo fajny, z wyjątkiem tego, że nie działa, zobacz mój komentarz poniżej i mój poprawiony jsperf.com/isupper-comparison/7 .str == str.toUpperCase();
zwraca true lub falseOdpowiedzi:
Odpowiedź Josha i Maleki zwróci prawdę zarówno na wielkie, jak i na małe litery, jeśli znak lub cały ciąg znaków jest liczbą. czyniąc wynik fałszywym. przykład z użyciem Josha
innym sposobem jest przetestowanie go najpierw, jeśli jest on numeryczny, w przeciwnym razie przetestuj go, jeśli jest to duży lub mały przykład
źródło
!
są numeryczne.var character='';
źródło
Spowoduje to zarejestrowanie wartości true, jeśli znak jest wielką literą, a wartość log false w każdym innym przypadku:
Możesz to przetestować tutaj: http://jsfiddle.net/Axfxz/ (użyj Firebug lub sth).
i to jest na małe litery :).
źródło
Problem z innymi odpowiedziami polega na tym, że niektóre znaki, takie jak cyfry lub znaki interpunkcyjne, zwracają również wartość true, gdy są sprawdzane małe / wielkie litery.
Uważam, że działa to bardzo dobrze:
Działa to z interpunkcją, cyframi i literami:
Aby sprawdzić jedną literę, po prostu zadzwoń za jej pomocą
isLowerCase(str[charIndex])
źródło
następnie :
źródło
Możesz użyć testu wyrażeń regularnych i
toUpperCase
metody:Zobacz też
źródło
&& chr === chr.toUpperCase();
?\u0080-\u024F
może zawierać małe znaki diakrytyczne, więc test powinien również sprawdzić sam znak.źródło
Dokładniej o to, o co pytano. Przekaż ciąg i pozycję do sprawdzenia. Bardzo blisko Josha, tyle że ten porówna większy ciąg. Dodałbym jako komentarz, ale nie mam jeszcze tej umiejętności.
źródło
Możesz również użyć wyrażenia regularnego, aby jawnie wykryć wielkie litery alfabetu łacińskiego.
EDYCJA: powyższa funkcja jest poprawna dla ASCII / Basic Latin Unicode, co prawdopodobnie jest wszystkim, na czym ci zależy. Następująca wersja obsługuje również suplement Latin-1 oraz bloki Unicode greckiego i koptyjskiego ... Na wypadek, gdybyś tego potrzebował z jakiegoś powodu.
Ta strategia zaczyna upaść, jeśli potrzebujesz dalszego wsparcia (czy Ѭ jest pisana wielkimi literami?), Ponieważ niektóre bloki łączą wielkie i małe litery.
źródło
.toLowerCase()
lub.toUpperCase()
jest preferowane, ponieważ obsługuje wewnętrznie większość ustawień narodowych.Dobra odpowiedź na to pytanie powinna być zwięzła, poprawnie obsługiwać Unicode i radzić sobie z pustymi łańcuchami i zerami.
To podejście najpierw zajmuje się pustymi łańcuchami i zerami, a następnie zapewnia, że konwersja danego łańcucha na małe litery zmienia jego równość. Zapewnia to, że ciąg zawiera co najmniej jedną wielką literę zgodnie z bieżącymi lokalnymi regułami wielkich liter (i nie zwróci fałszywych trafień dla liczb i innych glifów, które nie mają wielkich liter).
Pierwotne pytanie dotyczyło w szczególności przetestowania pierwszej postaci. Aby twój kod był prosty i przejrzysty, oddzieliłbym pierwszy znak od łańcucha osobno, zamiast sprawdzać, czy jest to duża litera.
źródło
Istnieje naprawdę prosta odpowiedź, o której nikt inny nie wspomniał:
Jeśli
str.toUpperCase()
nie zwraca tego samegostr
, musi być pisane małymi literami. Aby przetestować wielkie litery, zmień je nastr !== str.toLowererCase()
.W przeciwieństwie do niektórych innych odpowiedzi, działa poprawnie na znakach innych niż alfa (zwraca
false
) i działa na innych alfabetach, znakach akcentowanych itp.źródło
"É"
nie jest pisana małymi literami.źródło
return (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90)
.Najlepszym sposobem jest użycie wyrażenia regularnego, operatora trójskładnikowego i wbudowanej
.test()
metody ciągów.Pozostawiam wam Google tajniki wyrażeń regularnych i metodę testowania ciągów (są łatwe do znalezienia), ale tutaj użyjemy jej do przetestowania zmiennej.
Zwróci PRAWDA FAŁSZ na podstawie tego, czy twoja postać pasuje do zestawu znaków w wyrażeniu regularnym. Nasze wyrażenie regularne sprawdza wszystkie litery az,
/[a-z]/
niezależnie od ich wielkości, dziękii
fladze.Tak więc podstawowym testem byłoby:
Teraz musimy ustalić, czy jest to duża czy mała litera. Tak więc, jeśli usuniemy
i
flagę z naszego wyrażenia regularnego, to nasz powyższy kod będzie sprawdzał małe litery az. A jeśli przykleimy innąif
instrukcję doelse
naszej pierwszejif
instrukcji, możemy również przetestować duże litery, używając AZ. Lubię to:I na wypadek, gdyby nie był to list, możemy dodać jeszcze jedno zdanie końcowe:
Powyższy kod działałby. Ale to trochę brzydkie. Zamiast tego możemy użyć „trójskładnikowego operatora”, aby zastąpić
if-else
powyższe stwierdzenia. Operatory trójskładnikowe to po prostu stenograficzne proste sposoby kodowaniaif-else
. Składnia jest łatwa:Można je również zagnieżdżać w sobie. Funkcja może więc wyglądać następująco:
Powyższy kod wygląda dobrze, ale nie do końca działa, ponieważ jeśli nasz znak jest pisany małymi literami,
theAnswer
zostaje ustawiony na „” podczas testowania wielkich liter, więc pozwólmy na ich zagnieżdżenie:To zadziała świetnie! Ale nie trzeba mieć dwóch oddzielnych linii do ustawienia zmiennej,
theAnswer
a następnie jej zwrócenia. Powinniśmy raczej używaćlet
iconst
zamiastvar
(poszukaj ich, jeśli nie jesteś pewien, dlaczego). Po wprowadzeniu tych zmian:W rezultacie otrzymujemy elegancki, zwięzły fragment kodu. ;)
źródło
Jest to proste, czytelne rozwiązanie za pomocą prostego wyrażenia regularnego.
źródło
Możesz sprawdzić, czy twoja tablica zawiera wielkie lub małe litery, używając metody dopasowania i wyrażenia regularnego, poniżej to tylko podstawowa podstawa do rozpoczęcia testu
źródło
Możesz także tego użyć, sprawdzi ciąg znaków dla małych i wielkich liter
źródło
To sprawdza CAŁY ciąg znaków, a nie tylko pierwszą literę. Myślałem, że podzielę się tym ze wszystkimi tutaj.
Oto funkcja, która używa wyrażenia regularnego do testowania liter łańcucha; zwraca true, jeśli litera jest wielka (AZ). Następnie redukujemy tablicę prawda / fałsz do jednej wartości. Jeśli jest równa długości łańcucha, oznacza to, że wszystkie litery przeszły test wyrażenia regularnego, co oznacza, że łańcuch jest pisany wielkimi literami. Jeśli nie, ciąg jest pisany małymi literami.
źródło
Tak to ostatnio zrobiłem:
1) Sprawdź, czy znak / ciąg
s
jest pisany małymi literamis.toLowerCase() == s && s.toUpperCase() != s
2) Czek
s
jest pisany wielkimi literamis.toUpperCase() == s && s.toLowerCase() != s
Obejmuje przypadki, w których
s
zawiera nie alfabetyczne znaki i znaki diakrytyczne.źródło
Zdefiniuj funkcję checkCharType (). Deklarując zmienną returnValue i inicjalizując ją do znaku „O”, aby wskazać, że jest to inna wartość.
U dla wielkich liter; L dla małych liter; N dla liczby
Użyj metody charCodeAt (), aby uzyskać kod pierwszego znaku.
Korzystanie z instrukcji if, która sprawdza, w jakim zakresie wartości mieści się kod znaku.
Jeśli mieści się między kodami znaków dla A i Z, jego wielkimi literami, kod znaków między a i z, jego małymi literami. i tak dalej.
„A” .charCode (0)
var myChar = new String („A”); myChar.charCodeAt (0); „A”: kod liczbowy „65”
źródło
Odpowiedzi na to pytanie udzielono wiele razy, ale pomyślałem, że podzielę się moim rozwiązaniem, ponieważ nie widziałem go w podanych odpowiedziach.
2 ¢
źródło
Zobacz mój komentarz do wybranej odpowiedzi. Inne rozwiązania, które ograniczają się do tabeli ASCII lub wykorzystują dosłowne znaki literowe, całkowicie ignorują Unicode i kilkaset innych znaków, które mają wielkość liter.
Ten kod ustawi zmienną caseGroup na:
0 dla Bez skrzynki
Możesz upiec to w coś takiego ...
źródło
Na podstawie komentarza Sonic Beard do głównej odpowiedzi. Zmieniłem logikę w wyniku:
0: małe litery
1 wielkie litery
-1: ani
źródło
Innym sposobem jest porównanie postaci z pustym obiektem, tak naprawdę nie wiem, dlaczego to działa, ale działa:
więc w funkcji:
EDYCJA : nie działa z akcentami i znakami diakrytycznymi, więc można go usunąć
źródło
[object Object]
. Zasadniczo sprawdzasz, czy kod literowy pojawia się wcześniej[
. Ponieważ kody znaków dlaZ, [, a
są90, 91, 97
odpowiednio, porównanie jest prawdziwe dla wielkich liter i fałsz dla małych liter. Innymi słowy, jest to równie hackerski sposób na zrobienie tego, jak przy użyciu liczb podstawowych 36, aby uzyskać litery alfabetu.character.normalize("NFD").replace(/[\u0300-\u036f]/g
Zakładając, że ciąg jest uważany za nie wszystkie wielkie litery, jeśli obecna jest co najmniej jedna mała litera, działa to dobrze. Rozumiem, że nie jest to zwięzłe i zwięzłe, jak wszyscy inni, ale czy to działa =)
źródło
Tego, którego używam (zauważ, że nie robi to „TestString” jako „T est String” lub „Test String”).
źródło
Muszę przetestować ciąg dowolnego znaku (w tym spację, znaki, cyfry, znaki Unicode ...). Ponieważ białe znaki, cyfry, znaki ... będą takie same zarówno dla dużych jak i małych liter, i chcę znaleźć prawdziwe wielkie litery, robię to:
źródło
Wystarczy sprawdzić wartość ASCII
źródło
Funkcja Stephena Nelsona została przekonwertowana na prototyp z wieloma przykładami testów.
Dodałem również całe ciągi do funkcji dla kompletności.
Zobacz kod dla dodatkowych komentarzy.
źródło
źródło
źródło