Schreib den ersten Buchstaben in Ruby groß
Den upcase
Methode nutzt die gesamte Zeichenfolge.
Brauche ich, um Kapital nur den ersten Buchstaben.
Auch, ich muss unterstützt mehrere gängige Sprachen, wie Deutsch und Russisch.
Wie mache ich es?
Kommentar zu dem Problem
Beachten Sie, dass einige Sprachen haben unterschiedliche Vorstellungen über das, was der erste Buchstabe in Großbuchstaben ist. In der irischen, Sie tun Dinge wie "ich mBaile Átha Cliath" ("Dublin") - lower-case 'm', upper-case 'B'. (Siehe en.wikipedia.org/wiki/Consonant_mutation#Celtic_languages, wenn Sie neugierig sind, warum die Iren das tun und warum es Sinn macht.)
Und sich auch bewusst sein, dass #profitieren wird downcase alle Buchstaben, die nicht den ersten Buchstaben...das ist nicht immer, was Sie wollen.
['Raum', 'UFO', 'NASA'].collect{|w| w.capitalize} #=> ['Raum', 'Ufo', 'Nasa']
InformationsquelleAutor der Frage AntonAL | 2010-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, Ruby-version, die Sie verwenden.
Ruby 2.4 und höher
Es funktioniert einfach, da diese version ruby unterstützt Unicode case mapping.
Ruby 2.3 und niedriger
Das problem ist, es einfach nicht tun, was Sie es haben wollen: es gibt
мария
stattМария
.Wenn Sie mit den Schienen gibt es eine einfache Abhilfe:
macht den job.
Ansonsten haben Sie zu installieren, die unicode Schmuckstück und verwenden Sie es wie diese:
Ruby 1.8
Zunächst sicher, dass Sie die Codierung magic Kommentar:
gibt
invalid multibyte char (US-ASCII)
, während:funktioniert ohne Fehler, aber auch sehen Ruby 2.3 und niedriger Abschnitt für real profitieren.
InformationsquelleAutor der Antwort Alberto Santini
großschreiben Erster Buchstabe des ersten Wortes der Zeichenkette
profitieren ersten Buchstaben jedes Wortes
In rails:
ODER
In ruby:
außerhalb der Schienen, aber immer noch wollen, verwenden Sie die titleize Methode
InformationsquelleAutor der Antwort boulder_ruby
Leider, es ist unmöglich eine Maschine zu upcase/downcase/Großschreibung richtig. Es braucht viel zu viel Kontext-Informationen für einen computer zu verstehen.
Dass ist der Grund, warum Ruby ' s
String
- Klasse unterstützt nur die groß - /Kleinschreibung für ASCII-Zeichen, da gibt es mindestens etwas gut definiert.Was meine ich mit "Kontext-Informationen"?
Beispielsweise profitieren
i
richtig, müssen Sie wissen, welche Sprache der text ist. Englisch, zum Beispiel, hat nur zweii
s: HauptstadtI
ohne Punkt und kleini
mit einem Punkt. Aber Türkisch hat vieri
s: HauptstadtI
ohne Punkt -, Kapital -İ
mit einem Punkt, kleinenı
ohne Punkt, kleinei
mit einem Punkt. Also, in Englisch'i'.upcase # => 'I'
und in der türkischen'i'.upcase # => 'İ'
. In anderen Worten: da'i'.upcase
zurückgeben kann zwei verschiedene Ergebnisse, je nach Sprache, ist es offensichtlich unmöglich ist, richtig zu nutzen ein Wort, ohne zu wissen, seine Sprache.Aber Ruby kennt Sie nicht, die Sprache, es kennt nur die Codierung. Daher ist es unmöglich, richtig zu nutzen einen string mit Ruby ' s eingebaute Funktionen.
Es kommt noch schlimmer: sogar mit wissen, die Sprache, manchmal ist es unmöglich zu tun ist Großschreibung richtig. Zum Beispiel, in Deutsch,
'Maße'.upcase # => 'MASSE'
(Maße ist der plural von Maß Bedeutung Messung). Allerdings'Masse'.upcase # => 'MASSE'
(Bedeutung Masse). Also, was ist'MASSE'.capitalize
? In anderen Worten: richtig Kapital benötigt einen vollwertigen Künstlichen Intelligenz.Anstatt also manchmal geben die falsche Antwort, Ruby, wählt manchmal geben keine Antwort an alle, das ist der Grund, warum nicht-ASCII-Zeichen einfach ignoriert downcase/upcase/nutzen-Operationen. (Was natürlich liest auch zu falschen Ergebnissen, aber zumindest ist es leicht zu überprüfen.)
InformationsquelleAutor der Antwort Jörg W Mittag
Gut, nur damit wir wissen, wie man Kapital nur den ersten Buchstaben und überlassen Sie den rest von Ihnen allein (weil manchmal das ist, was gewünscht ist)...
Aufruf von #Kapital führen würde
["Nasa", "Mhz", "Sputnik"]
InformationsquelleAutor der Antwort Huliax
Als Aktive Unterstützung und Schienen 5.0.0.beta4 Sie können eine der beiden Methoden:
String#upcase_first
oderActiveSupport::Inflector#upcase_first
. Überprüfen Sie diese blog-post für mehr info.InformationsquelleAutor der Antwort user1519240
Verwenden
capitalize
. Aus der docs:InformationsquelleAutor der Antwort jhwist
Können Sie
mb_chars
. In dieser Hinsicht umlaute:Beispiel:
InformationsquelleAutor der Antwort phlegx