Konvertieren von string zu Titel Fall mit JavaScript
Gibt es eine einfache Möglichkeit zur Konvertierung einer Zeichenfolge in Titel Fall? E. g. john smith
wird John Smith
. Ich bin nicht auf der Suche für etwas kompliziertes wie John Resig ' s Lösung, nur (hoffentlich) eine Art von ein - oder zwei-liner.
Es gibt verschiedene Methoden, haben wir einige performance-Statistiken?
InformationsquelleAutor MDCore | 2008-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas eleganter Weg, die Anpassung Greg Dean ' s-Funktion:
Nennen mag:
Jo-Ann Smith
wird mit diesem code konvertieren Sie Sie inJo-ann Smith
(beachten Sie die Kleinbuchstabena
imAnn
).Warum soll er nicht verändern, die String-Prototyp? Ich denke, es ist eine gute Lösung. Denke der ruby-offene Klassen, die es gilt perfekt zum hinzufügen von Funktionen zu bestehenden Klassen und es ist allgemein akzeptiert.
Weil es sich nicht gut mit anderen spielen! Schlechte Dinge passieren, wenn Sie 2 Bibliotheken, die beide versuchen, zu ändern nativen JavaScript-Objekte mit inkompatiblen änderungen. Stell dir vor, wenn jQuery und Google Maps folgten diesem design pattern, Sie konnte nicht beide auf der gleichen Seite.
Ein sehr guter Punkt. Indem der name der Methode sollte helfen, dies zu vermeiden, wird die Methode nicht-zählbare.
Ich fühle mich wie der "nicht ändern nativen JavaScript-Objekte" - Aussage ist genauso wie "nie goto verwenden" oder "eval is evil". Es gibt viele Fälle, in denen es ok ist. Wenn Sie die vollständige Kontrolle über Ihr Projekt und natürlich nicht zu planen über die Freigabe, die es als eine Bibliothek, ich sehe keine Probleme mit dieser Methode.
InformationsquelleAutor Tuan
Versuchen, die text-transform CSS-Stil, um Ihre Steuerelemente.
zB:
(text-transform: capitalize);
Nur mit einem JS-Ansatz, wenn es absolut notwendig ist.
Kleinbuchstaben Regel würde ersetzt werden durch einen Titel Fall-Regel. Da css nicht ändern Sie die Quelle von Inhalten, die Wirkung ist, dass die Kleinschreibung die Regel ist entfernt (wobei die source-content in all caps) und dann die titlecase Regel angewendet werden würde (nichts zu tun).
JS ist außerhalb von Browsern.
InformationsquelleAutor Talha Ashfaque
Hier ist meine version, IMO ist es einfach zu verstehen und elegant zu.
str.split(' ').map(i => i[0].toUpperCase() + i.substring(1).toLowerCase()).join(' ')
Ich bin nicht einverstanden mit dem Aufruf
.toLowerCase()
. Namen wie "McDonald" oder Abkürzungen wie "ASAP" sollte behalten Ihre Großbuchstaben. Wenn jemand tatsächlich bestanden in einem string wie "heLLO", die Anwendung sollte nicht davon ausgehen, die Großbuchstaben sind falsch.Wie wäre es damit?
String.prototype.toTitleCase = function (blnForceLower) { var strReturn; (blnForceLower ? strReturn = this.toLowerCase() : strReturn = this); return strReturn .split(' ') .map(i => i[0].toUpperCase() + i.substr(1)) .join(' '); }
Ja, einer option zu zwingen Kleinschreibung bevorzugt.
Ja, das ist leicht zu verstehen, aber wenn ich versuche, es nicht wirklich nutzen nichts (aus irgendeinem Grund).
InformationsquelleAutor a8m
Hier ist meine Funktion wandelt die Anfangsbuchstaben, sondern auch bewahrt definiert Akronyme als große Buchstaben und kleine Wörter als Kleinbuchstaben:
Beispiel:
Behoben. Die regex in der Dritten Zeile wurde geändert von
/\w\S*/g
zu/([^\W_]+[^\s-]*) */g
pro @awashburn Kommentar über diese Adresse.Ist es ein Vorteil gewonnen werden indem Sie Ihre regex-pattern über
/\b\w+/g
, die ich finde, werden mehr schnell verständlich?Nicht, dass ich sehen kann, war ich einfach unter einem anderen Kommentator Vorschlag zur Lösung der Bindestrich-Wort-problem, aber dein regex zu tun scheint genau so gut, und Einfachheit ist immer besser. Für die Nachwelt und zukünftige Besucher zu diesem post, ich gerade geändert die regex in der Dritten Zeile von
/([^\W_]+[^\s-]*) */g
zu/\b\w+/g
pro @Michael s Kommentar, bitte Kommentar, wenn Sie finden, ein Fall, in dem die mehr-komplizierte regex notwendig ist.Ich habe die 3. Zeile regex zu
/\b[\w-\']+/g
damit Bindestrich-Wörtern und der Apostroph in Worten.InformationsquelleAutor Geoffrey Booth
Bevorzuge ich die folgenden über die anderen Antworten. Es entspricht nur den ersten Buchstaben von jedem Wort und nutzt es. Einfacher code, einfacher zu Lesen und weniger bytes. Es behält bestehende Großbuchstaben, um zu verhindern, verzerren Akronyme. Jedoch können Sie immer rufen
toLowerCase()
auf Ihren string-ersten.Können Sie fügen Sie diese zu Ihrem string Prototyp mit denen Sie
'my string'.toTitle()
wie folgt:const titleCase = (str) => str.replace(/\b\S/g, t => t.toUpperCase());
Ich wollte nicht zu brechen, DH aber ja, wenn die Anwendung nicht im legacy-browser empfindlich, könnte es kürzer sein.
Dies ist nur eine unvollständige Lösung - op gefragt, für wie konvertieren eine Zeichenfolge in Titel Fall. Diese Antwort nicht erreichen, dass für die Eingänge wie
NoT qUiITe
.Die Frage war nicht vorgeschrieben, dass Sie groß-und Kleinschreibung-Eingänge umgewandelt werden soll. Allerdings habe ich aktualisiert, die Antwort zu erwähnen
toLowerCase
. Just bewusst sein, dass es brechen würde Akronyme.an HTML document
:An HTML Document
vsAn Html Document
Während Ihres ersten Beispiel war konstruiert, Sie machen einen guten Punkt in die besagt, dass der Ausgang wäre unverändert, wenn der Eingang wurden kapitalisiert. Das sagte, ich fühle die Antwort ist-wie es ist (mit dem Bearbeiten-was darauf hindeutet
toLowerCase
) ist flexibler/hilfreich als eine, die meint die Entwickler Absichten. Diese Methode spiegelt auch die Funktionalität der ähnlichen built-in Methoden von anderen Sprachen wie PHP (ucwords
) und Golang (strings.Title
). .NET (TextInfo.ToTitleCase
) interessanterweise Werke für gemischten Fall, würde aber auch gehen voll kapitalisiert strings unverändert.InformationsquelleAutor Tom Kay
Ohne Verwendung von regex nur für Referenz:
InformationsquelleAutor Mike
Den Fall, Sie sind besorgt über diese filler-Wörter, Sie kann immer nur sagen, die Funktion, was nicht zu nutzen.
Hoffe, das hilft Ihnen heraus.
Bearbeiten
Wenn Sie wollen führende Kleber Worten, Sie können verfolgen, diese w/noch eine variable:
glue ='de|da|del|dos|do|das|des|la|della|delli'.split('|');
Ist dies nicht sicherzustellen Großschreibung des ersten Wortes; ie
and another thing
wirdand Another Thing
. Brauchen nur ein eleganter Weg, um immer kapitalisieren das erste Wort.mit Leerzeichen Auffüllen, so sind Sie mit ' und ', ' de ', etc. als Suchbegriff ein, dann "Und Andere, Und eine Andere' ersetzen bis 'Und noch einer und noch einer'.
InformationsquelleAutor fncomp
Wenn regex im obigen Lösungen ist, bekommen Sie verwirrt, versuchen Sie, diesen code:
uhhh...
split
konvertieren es in ein array, nur sehen es nicht so offensichtlich, weilmap
bedeutet, Sie nicht zu verwenden[]
SchreibweiseDas ist das gleiche wie a8m Antwort von 2 Jahren.
Pausen für den single-char-Eingänge.
überprüfen Sie die revision der Geschichte. a8m nicht verwenden Sie eine der Pfeil-Funktion in der original-Antwort.
InformationsquelleAutor immazharkhan
Dies funktioniert nur für ein-Wort-strings, aber das ist das, was ich brauchte:
JSFiddle: https://jsfiddle.net/simo/gou2uhLm/
Wer hatte die gleiche Frage, es wird ein Ersatz - "blob", der in dem Ersatz-Bereich. Die blobs sind fortlaufend nummeriert, wobei die erste () in $1, der zweite in $2. Ich fand diese Seite hilfreich: javascript.info/tutorial/regular-expressions-methods
Ich bin nicht in der Lage die oben zu arbeiten, aber ich bin weit davon entfernt ein regex-Assistenten. Ich bin mit
'string'.replace(/^(.)(.*)/,function(s,p1,p2){return p1.toUpperCase()+p2;})
Wieder, das funktioniert nur bei Großschreibung des ersten Buchstaben einer Zeichenfolge, aber im Falle, dass ist, was Sie brauchen, meine Konstruktion funktioniert.Aus irgendeinem Grund FF35 scheint zu ersticken
'$1'.toUpperCase()
scheint die Großbuchstaben nicht getan wurde, indem die Zeit, die der Wert zugewiesen wird. Umgangen, indem Sie mit der Funktion'string'.replace(/^(.){1}/,function(match) { return match.toUpperCase(); })
Hallo, die Antwort ist behoben! Ich bin mir ziemlich sicher, dass es funktioniert hat, indem die Zeit, die ich anfänglich gepostet. Trotzdem vielen Dank für den input!
InformationsquelleAutor simo
Ich diese Funktion, die mit dem letzten Namen (es ist also nicht Titel Fall) wie "McDonald" oder "MacDonald" oder "O ' Toole" oder "D'Orazio". Es nicht, jedoch Griff die Deutsche oder Niederländische Namen mit "van" oder "von", die oft in Kleinbuchstaben... ich glaube, "de" wird Häufig-und Kleinschreibung zu, wie "Robert de Niro". Diese würden immer noch nicht angegangen.
Dies war die einzige Funktion, die korrekt behandelt, die Umwandlung von groß-und Kleinschreibung die groß - / Kleinschreibung und bemerkt, dass die Initialen wie "US Virgin Islands".
InformationsquelleAutor Lwangaman
Scheint zu funktionieren...
Getestet mit der oben genannten "quick-brown-fox? /springt/^über^ die ¡faul! Hund..." und "C:/program Dateien/einige Verkäufer/die 2. Anwendung/ein file1.txt".
Wenn Sie wollen 2. anstelle von 2. Sie ändern können, um
/([a-z])(\w*)/g
.Die erste form kann vereinfacht werden als:
InformationsquelleAutor PhiLho
Versuchen, diese
Beispiel
InformationsquelleAutor Maxi Baez
Versuchen, diese, kürzester Weg:
InformationsquelleAutor Vikram
ES 6
sonst
s.slice(0, 1).toUpperCase()
wenn Sie wollen immer noch, dass die ersten Buchstaben.sollten Sie auch korrekt den code in ES6.
Bearbeitet, vielen Dank für das heads-up!
Pausen, wenn
str
ist ein einzelnes Zeichenduplizieren von a8m Antwort
InformationsquelleAutor jssridhar
Meisten dieser Antworten scheinen zu ignorieren, die Möglichkeit der Verwendung des Wortes Grenze Metazeichen (\b). Eine kürzere version von Greg Dean ' s Antwort, die es nutzen:
Werke für Bindestrich-Namen wie Jim-Bob zu.
Hmm, das scheint ein bug in der regex-Implementierung, ich würde denken, Zeichen mit Akzent werden sollte, Wort, Zeichen (Sie sind richtig, wenn, wie es nicht Arbeit für jene Fälle).
InformationsquelleAutor lewax00
Ich denke, die einfachste ist die Verwendung von css.
Ich aktualisierte den code. Konnte die Aktualisierung funktioniert?
Ich glaube nicht, dass das funktioniert, leider.
Ich aktualisierte den code und getestet. Jetzt sollte es funktionieren.
Sie können nur unter Verwendung von CSS in einem Bruchteil von einer Umgebung, die JS verwendet wird, so dass diese Lösung nicht tragfähig. Auch inline-styles sollten unter allen Umständen vermieden werden.
InformationsquelleAutor wondim
Hier ist meine Funktion, die kümmert sich um Zeichen mit Akzenten (wichtig für die französische !) und, dass können schalten Sie on/off der Umgang senkt Ausnahmen. Hoffe, das hilft.
InformationsquelleAutor Ouatataz
Wir haben haben eine Diskussion wieder hier im Büro und wir denken, dass das versuchen, automatisch zu korrigieren, wie die Menschen die Eingabe von Namen in der aktuellen Art und Weise Sie wollen es tun, ist behaftet mit möglichen Fragen.
Wir haben mehrere Fälle, in denen verschiedene Arten von auto-Großschreibung auseinander fallen und diese sind nur für englische Namen allein, jede Sprache hat Ihre eigene Komplexität.
Probleme mit Großschreibung des ersten Buchstabens eines jeden namens:
• Akronyme wie IBM dürfen nicht eingegeben werden, würde in Ibm.
• Der Name McDonald 'verwandeln würde, in ein Mcdonald' was falsch ist, das gleiche ist MacDonald zu.
• Diese Doppelnamen wie Marie-Tonks bekommen würde, verwandelte sich in Marie-tonks.
• Namen wie O 'Connor würde wiederum in O' Connor.
Für die meisten dieser könnten Sie schreiben, benutzerdefinierte Regeln zu umgehen, aber diese hat immer noch Probleme mit Abkürzungen wie vor und Sie bekommen ein neues Problem:
• Hinzufügen einer Regel zu beheben-Namen mit Mac wie MacDonald, würde die break-Namen wie Macy ' drehen Sie es in MacY.
Die einzige Lösung, die wir haben kommen mit, dass ist nie falsch ist zu nutzen, jeder Brief ist ein brute-force-Methode, dass die DBS scheinen auch verwenden.
Also, wenn Sie wollen, um den Prozess zu automatisieren, ist es so gut wie unmöglich zu tun, ohne ein Wörterbuch für jeden einzelnen Namen und jedes Wort und wie es sein sollte capitlized, , Wenn Sie nicht über eine Regel, die deckt alles, was nicht zu verwenden, wie es wird nur ärgern Sie Ihre Benutzer und prompt Leute, die wollen, geben Sie deren Namen richtig zu gehen, wo sonst.
InformationsquelleAutor jjr2000
Wollte ich hinzufügen, dass meine eigene Antwort, wie ich brauchte eine robuste
toTitleCase
Funktion, die berücksichtigt, Grammatik-Regeln hier aufgelistet (Google empfohlenen Artikel). Es gibt verschiedene Regeln, die abhängig von der Länge der Eingabe-Zeichenkette. Unten ist die Funktion + unit-tests.Die Funktion auch konsolidiert Leerzeichen und entfernt Sonderzeichen (ändern regex für Ihre Bedürfnisse)
toTitleCase Funktion
Unit-Tests, um Sicherzustellen, Korrektheit
Bitte beachten Sie, dass ich bin der Beseitigung einiges an Sonderzeichen aus strings zur Verfügung gestellt. Müssen Sie zwicken die regex-zu-Adresse, die den Anforderungen Ihres Projekts.
InformationsquelleAutor dipole_moment
Grundlage dafür ist meine Lösung für FreeCodeCamp ' s Bonfire "Title Case", die erfordert, dass Sie zuerst konvertieren Sie die angegebenen string in Kleinbuchstaben umwandeln und dann jedes Zeichen ausgehend, einen Raum zu groß.
Ohne Verwendung von regex:
InformationsquelleAutor Jamesy Dimmick May
Meine simple und einfache Variante für das problem:
InformationsquelleAutor Suryatapa
hier ist noch eine Lösung mit css (und javascript, wenn der text, den Sie verändern wollen, in Großbuchstaben):
html
js
css
InformationsquelleAutor henrie
Als full-featured als John Resig ' s Lösung, aber als one-liner: (basierend auf dieses github-Projekt)
Wäre gut, dies in einer klaren, gut formatierten code statt minified.
InformationsquelleAutor Billy Moon