El upcase
met en majuscules la chaîne entière, mais je dois mettre en majuscules uniquement la première lettre.
J'ai également besoin de prendre en charge plusieurs langues populaires, comme l'allemand et le russe.
Comment dois-je m'y prendre ?
El upcase
met en majuscules la chaîne entière, mais je dois mettre en majuscules uniquement la première lettre.
J'ai également besoin de prendre en charge plusieurs langues populaires, comme l'allemand et le russe.
Comment dois-je m'y prendre ?
Utilisez capitalize
. De la Chaîne de caractères documentation :
Renvoie une copie de str avec le premier caractère converti en majuscule et le reste en minuscule.
"hello".capitalize #=> "Hello"
"HELLO".capitalize #=> "Hello"
"123ABC".capitalize #=> "123abc"
-1. L'OP explicitement mentionne des textes allemands et russes, ce qui implique des caractères non ASCII. String#upcase
(et aussi String#downcase
) ne sont définis que pour les caractères ASCII.
Ma version :
class String
def upcase_first
return self if empty?
dup.tap {|s| s[0] = s[0].upcase }
end
def upcase_first!
replace upcase_first
end
end
['NASA title', 'MHz', 'sputnik'].map &:upcase_first #=> ["NASA title", "MHz", "Sputnik"]
Vérifiez également :
https://www.rubydoc.info/gems/activesupport/5.0.0.1/String%3Aupcase_first
https://www.rubydoc.info/gems/activesupport/5.0.0.1/ActiveSupport/Inflector#upcase_first-instance_method
Voici une autre façon de mettre en majuscules chaque mot d'une chaîne de caractères. \w
ne correspond pas aux caractères cyrilliques ou aux caractères latins avec diacritiques mais [[:word:]]
fait. upcase
, downcase
, capitalize
y swapcase
ne s'est pas appliqué aux caractères non ASCII avant la version 2.4.0 de Ruby, publiée en 2016.
"aAa-BBB ä _a a_a".gsub(/\w+/,&:capitalize)
=> "Aaa-Bbb ä _a A_a"
"aAa-BBB ä _a a_a".gsub(/[[:word:]]+/,&:capitalize)
=> "Aaa-Bbb Ä _a A_a"
[[:word:]]
correspond aux caractères de ces catégories :
Ll (Letter, Lowercase)
Lu (Letter, Uppercase)
Lt (Letter, Titlecase)
Lo (Letter, Other)
Lm (Letter, Modifier)
Nd (Number, Decimal Digit)
Pc (Punctuation, Connector)
[[:word:]]
correspond aux 10 caractères de la rubrique "Ponctuation, Connecteur" ( Pc
) :
005F _ LOW LINE
203F UNDERTIE
2040 CHARACTER TIE
2054 INVERTED UNDERTIE
FE33 PRESENTATION FORM FOR VERTICAL LOW LINE
FE34 PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
FE4D DASHED LOW LINE
FE4E CENTRELINE LOW LINE
FE4F WAVY LOW LINE
FF3F FULLWIDTH LOW LINE
C'est une autre façon de ne convertir en majuscules que le premier caractère d'une chaîne de caractères :
"striNG".sub(/./,&:upcase)
=> "StriNG"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
Sachez que certaines langues ont des idées différentes sur la première lettre à mettre en majuscule. En irlandais, on fait des choses comme "i mBaile Átha Cliath" ("à Dublin") - m minuscule, B majuscule. (Voir fr.wikipedia.org/wiki/Consonant_mutation#Celtic_languages si vous êtes curieux de savoir pourquoi les Irlandais font cela et pourquoi cela a du sens).
4 votes
Sachez également que #capitalize met en minuscule toutes les lettres qui ne sont pas la première lettre... ce qui n'est pas toujours ce que vous souhaitez.
['space', 'UFO', 'NASA'].collect{|w| w.capitalize} #=> ['Space', 'Ufo', 'Nasa']