Comment puis-je vérifier qu'un mot est déjà en majuscule dans Ruby?
je veux être en mesure de vérifier si un mot est déjà tout en majuscules. Et ça pourrait aussi inclure des nombres.
exemple:
GO234 => yes
Go234 => no
4 réponses
Vous pouvez comparer la chaîne avec la même chaîne, mais en majuscules:
'go234' == 'go234'.upcase #=> false
'GO234' == 'GO234'.upcase #=> true
Espérons que cette aide
a = "Go234"
a.match(/\p{Lower}/) # => #<MatchData "o">
b = "GO234"
b.match(/\p{Lower}/) # => nil
c = "123"
c.match(/\p{Lower}/) # => nil
d = "µ"
d.match(/\p{Lower}/) # => #<MatchData "µ">
donc quand le résultat du match est nul, il est déjà en majuscule, sinon quelque chose est en minuscules.
Merci @mu est trop court mentionné que nous devrions utiliser /\P{Lower}/ à la place pour correspondre à des lettres minuscules non-anglaises.
j'utilise la solution de @PeterWong et ça marche très bien tant que la chaîne contre laquelle vous cochez Ne contient pas de caractères spéciaux (comme indiqué dans les commentaires).
cependant si vous voulez l'utiliser pour des cordes comme "Überall", il suffit d'ajouter cette légère modification:
utf_pattern = Regexp.new("\p{Lower}".force_encoding("UTF-8"))
a = "Go234"
a.match(utf_pattern) # => #<MatchData "o">
b = "GO234"
b.match(utf_pattern) # => nil
b = "ÜÖ234"
b.match(utf_pattern) # => nil
b = "Über234"
b.match(utf_pattern) # => #<MatchData "b">
amusez-vous bien!
vous pouvez comparer la chaîne et la chaîne.UPC pour l'égalité (comme le montre JCorc..)
irb(main):007:0> str = "Go234"
=> "Go234"
irb(main):008:0> str == str.upcase
=> false
ou
appelez arg.upcase! et vérifier néant. (Mais ceci modifiera l'argument original, de sorte que vous pourriez avoir à créer une copie)
irb(main):001:0> "GO234".upcase!
=> nil
irb(main):002:0> "Go234".upcase!
=> "GO234"
mise à jour: si vous voulez que cela fonctionne pour unicode.. (multi-octets), puis la chaîne # upcase ne fonctionnera pas, vous aurez besoin de la gemme unicode-util mentionnée dans ceci DONC, la question