Wie kann ich mit JavaScript testen, ob ein Buchstabe in einer Zeichenfolge in Groß- oder Kleinbuchstaben geschrieben ist?
javascript
Joe
quelle
quelle
[:upper:]
) ist schnell und sehr cool, außer dass es nicht funktioniert. Siehe meinen Kommentar unten und meinen korrigierten jsperf.com/isupper-comparison/7 .str == str.toUpperCase();
gibt wahr oder falsch zurückAntworten:
Die Antwort von Josh und Maleki gibt sowohl in Groß- als auch in Kleinbuchstaben true zurück, wenn das Zeichen oder die gesamte Zeichenfolge numerisch ist. das Ergebnis zu einem falschen Ergebnis machen. Beispiel mit Josh
Eine andere Möglichkeit besteht darin, es zuerst zu testen, wenn es numerisch ist, oder es zu testen, wenn es sich um ein Beispiel in Groß- oder Kleinschreibung handelt
quelle
!
numerisch sind.var character='';
quelle
Dies protokolliert true, wenn das Zeichen ein Großbuchstabe ist, und in allen anderen Fällen false:
Sie können es hier testen: http://jsfiddle.net/Axfxz/ (verwenden Sie Firebug oder etw).
und das ist für Kleinbuchstaben :).
quelle
Das Problem mit den anderen Antworten ist, dass einige Zeichen wie Zahlen oder Satzzeichen auch true zurückgeben, wenn sie auf Klein- / Großbuchstaben überprüft werden.
Ich fand das sehr gut:
Dies funktioniert für Interpunktion, Zahlen und Buchstaben:
Um einen Buchstaben zu überprüfen, rufen Sie ihn einfach mit auf
isLowerCase(str[charIndex])
quelle
dann :
quelle
Sie können einen regulären Ausdruckstest und die folgende
toUpperCase
Methode verwenden:Siehe auch
quelle
&& chr === chr.toUpperCase();
?\u0080-\u024F
kann diakritische Zeichen in Kleinbuchstaben enthalten, daher sollte der Test auch das Zeichen selbst überprüfen.quelle
Genauer gesagt, was gefragt wird. Übergeben Sie einen String und eine zu überprüfende Position. Sehr nah an Josh's, außer dass dieser eine größere Saite vergleicht. Hätte als Kommentar hinzugefügt, aber ich habe diese Fähigkeit noch nicht.
quelle
Sie können auch einen regulären Ausdruck verwenden, um römische alphabetische Großbuchstaben explizit zu erkennen.
BEARBEITEN: Die obige Funktion ist für ASCII / Basic Latin Unicode korrekt, was wahrscheinlich alles ist, was Sie jemals interessieren werden. Die folgende Version unterstützt auch Latin-1 Supplement sowie griechische und koptische Unicode-Blöcke ... Falls Sie dies aus irgendeinem Grund benötigen.
Diese Strategie fällt ab, wenn Sie weitere Unterstützung benötigen (ist Ѭ Großbuchstaben?), Da einige Blöcke Groß- und Kleinbuchstaben vermischen.
quelle
.toLowerCase()
oder.toUpperCase()
bevorzugt, da sie die meisten Gebietsschemas intern unterstützt.Eine gute Antwort auf diese Frage sollte prägnant sein, Unicode korrekt behandeln und mit leeren Zeichenfolgen und Nullen umgehen.
Dieser Ansatz behandelt zuerst leere Zeichenfolgen und Nullen und stellt dann sicher, dass das Konvertieren der angegebenen Zeichenfolge in Kleinbuchstaben ihre Gleichheit ändert. Dadurch wird sichergestellt, dass die Zeichenfolge mindestens einen Großbuchstaben gemäß den Großschreibregeln des aktuellen Orts enthält (und keine falsch positiven Ergebnisse für Zahlen und andere Glyphen ohne Großschreibung zurückgibt).
Die ursprüngliche Frage bezog sich speziell auf das Testen des ersten Zeichens. Um Ihren Code einfach und klar zu halten, habe ich das erste Zeichen getrennt von der Prüfung getrennt, ob es in Großbuchstaben geschrieben ist.
quelle
Es gibt eine wirklich einfache Antwort, die niemand sonst erwähnt hat:
Wenn
str.toUpperCase()
dies nicht derstr
Fall ist, muss es in Kleinbuchstaben geschrieben werden. Um auf Großbuchstaben zu testen, ändern Sie diese instr !== str.toLowererCase()
.Im Gegensatz zu einigen anderen Antworten funktioniert es korrekt bei Nicht-Alpha-Zeichen (Rückgaben
false
) und bei anderen Alphabeten, Akzentzeichen usw.quelle
"É"
ist nicht Kleinbuchstaben.quelle
return (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90)
.Der beste Weg ist, einen regulären Ausdruck, einen ternären Operator und den eingebauten zu verwenden
.test()
Methode für Zeichenfolgen.Ich überlasse es Google, die Vor- und Nachteile regulärer Ausdrücke und die Testmethode für Zeichenfolgen (sie sind leicht zu finden) zu googeln, aber hier werden wir sie zum Testen Ihrer Variablen verwenden.
Dies gibt TRUE of FALSE zurück, je nachdem, ob Ihr Zeichen mit dem Zeichensatz im regulären Ausdruck übereinstimmt oder nicht. Unser regulärer Ausdruck prüft
/[a-z]/
dank deri
Flagge, .Ein grundlegender Test wäre also:
Jetzt müssen wir feststellen, ob es sich um Groß- oder Kleinbuchstaben handelt. Wenn wir also das
i
Flag aus unserem regulären Ausdruck entfernen , wird unser obiger Code auf Kleinbuchstaben az prüfen. Und wenn wir eine andereif
Aussage in dieelse
ersteif
Aussage einfügen, können wir auch mit AZ auf Großbuchstaben testen. So was:Und für den Fall, dass es sich nicht um einen Brief handelt, können wir eine letzte else-Anweisung hinzufügen:
Der obige Code würde funktionieren. Aber es ist irgendwie hässlich. Stattdessen können wir einen "ternären Operator" verwenden, um unsere
if-else
obigen Aussagen zu ersetzen . Ternäre Operatoren sind nur eine Abkürzung für einfache Codierungsmethodenif-else
. Die Syntax ist einfach:Und diese können auch ineinander verschachtelt werden. Eine Funktion könnte also so aussehen:
Der obige Code sieht gut aus, funktioniert aber nicht ganz, denn wenn unser Zeichen in Kleinbuchstaben geschrieben ist,
theAnswer
wird er beim Testen auf Großbuchstaben auf "" gesetzt. Verschachteln Sie sie also:Das wird super funktionieren! Es sind jedoch nicht zwei separate Zeilen erforderlich, um die Variable festzulegen
theAnswer
und dann zurückzugeben. Und wir sollten verwendenlet
undconst
nichtvar
(schauen Sie nach, wenn Sie nicht sicher sind, warum). Sobald wir diese Änderungen vorgenommen haben:Und am Ende erhalten wir einen eleganten, prägnanten Code. ;)
quelle
Dies ist eine einfache, lesbare Lösung mit einem einfachen regulären Ausdruck.
quelle
Sie können testen, ob Ihr Array eine Zeichenfolge in Groß- oder Kleinbuchstaben enthält, indem Sie die Übereinstimmungsmethode und den regulären Ausdruck verwenden. Nachfolgend finden Sie nur eine grundlegende Grundlage, um Ihren Test zu starten
quelle
Sie können dies auch verwenden, um die Zeichenfolge auf Klein- und Großbuchstaben zu überprüfen
quelle
Dies überprüft die GESAMTE Zeichenfolge, nicht nur den ersten Buchstaben. Ich dachte, ich würde es mit allen hier teilen.
Hier ist eine Funktion, die einen regulären Ausdruck verwendet, um die Buchstaben einer Zeichenfolge zu testen. Es gibt true zurück, wenn der Buchstabe in Großbuchstaben (AZ) geschrieben ist. Wir reduzieren dann das True / False-Array auf einen einzelnen Wert. Wenn es der Länge der Zeichenfolge entspricht, bedeutet dies, dass alle Buchstaben den Regex-Test bestanden haben, was bedeutet, dass die Zeichenfolge in Großbuchstaben geschrieben ist. Wenn nicht, ist die Zeichenfolge in Kleinbuchstaben.
quelle
So habe ich es kürzlich gemacht:
1) Überprüfen Sie, ob ein Zeichen / eine Zeichenfolge
s
in Kleinbuchstaben geschrieben ists.toLowerCase() == s && s.toUpperCase() != s
2) Überprüfen Sie, ob
s
Großbuchstaben vorhanden sinds.toUpperCase() == s && s.toLowerCase() != s
Deckt Fälle ab, in denen
s
nicht alphabetische Zeichen und Diakritika enthalten sind.quelle
Definieren Sie eine Funktion checkCharType (), indem Sie die Variable returnValue deklarieren und mit dem Zeichen "O" initialisieren, um anzuzeigen, dass es sich um einen anderen Wert handelt.
U für Großbuchstaben; L für Kleinbuchstaben; N für Nummer
Verwenden Sie die Methode charCodeAt (), um den Zeichencode des ersten Zeichens abzurufen.
Verwenden Sie die if-Anweisung, die prüft, in welchen Wertebereich der Zeichencode fällt.
Wenn es zwischen den Zeichencodes für A und Z, seinem Großbuchstaben, Zeichencode zwischen a und z, seinem Kleinbuchstaben liegt. und so weiter.
"A" .charCode (0)
var myChar = neuer String ("A"); myChar.charCodeAt (0); "A": Nummerncode "65"
quelle
Diese Frage wurde einige Male eindeutig beantwortet, aber ich dachte, ich würde meine Lösung teilen, da ich sie in den gegebenen Antworten nicht gesehen habe.
2 ¢
quelle
Siehe meinen Kommentar zur gewählten Antwort. Andere Lösungen, die sich auf die ASCII-Tabelle beschränken oder die tatsächlichen Zeichenliterale verwenden, ignorieren Unicode und die mehreren hundert anderen Zeichen, die Groß- und Kleinschreibung enthalten, vollständig.
Dieser Code setzt die caseGroup-Variable auf:
0 für Ohne Fall
Sie könnten das in so etwas backen ...
quelle
Basierend auf Sonic Beard Kommentar zur Hauptantwort. Ich habe die Logik im Ergebnis geändert:
0: Kleinbuchstaben
1 Großbuchstaben
-1: weder
quelle
Eine andere Möglichkeit besteht darin, den Charakter mit einem leeren Objekt zu vergleichen. Ich weiß nicht genau, warum es funktioniert, aber es funktioniert:
also in einer Funktion:
BEARBEITEN : Es funktioniert nicht mit Akzenten und diakritischen Zeichen, daher ist es möglich, es zu entfernen
quelle
[object Object]
. Sie überprüfen im Grunde, ob der Zeichencode des Buchstabens vorher kommt[
. Da die Zeichencodes für jeweilsZ, [, a
sind90, 91, 97
, ist der Vergleich für Großbuchstaben wahr und für Kleinbuchstaben falsch. Mit anderen Worten, es ist eine ebenso hackige Methode wie die Verwendung von Basis-36-Zahlen, um die Buchstaben des Alphabets zu erhalten.character.normalize("NFD").replace(/[\u0300-\u036f]/g
Angenommen, eine Zeichenfolge wird nur dann als nicht vollständig in Großbuchstaben betrachtet, wenn mindestens ein Kleinbuchstabe vorhanden ist, funktioniert dies einwandfrei. Ich verstehe, dass es nicht prägnant und prägnant ist, wie es alle anderen versucht haben, aber es funktioniert =)
quelle
Eine, die ich benutze (beachte, dass "TestString" nicht als "Test String" oder "Test String" erstellt wird).
quelle
Ich muss gegen eine Zeichenfolge eines beliebigen Zeichens testen (einschließlich Leerzeichen, Markierungen, Zahlen, Unicode-Zeichen ...). Da Leerzeichen, Zahlen, Markierungen ... sowohl in Groß- als auch in Kleinbuchstaben gleich sind und ich echte Großbuchstaben finden möchte, mache ich Folgendes:
quelle
Überprüfen Sie einfach den ASCII-Wert
quelle
Stephen Nelsons Funktion wurde in einen Prototyp mit vielen Testbeispielen umgewandelt.
Der Vollständigkeit halber habe ich der Funktion auch ganze Zeichenfolgen hinzugefügt.
Weitere Kommentare finden Sie im Code.
quelle
quelle
quelle