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
20
demandé sur Jacob 2011-12-16 07:55:55

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

40
répondu JCorcuera 2011-12-16 04:00:12
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.

23
répondu PeterWong 2011-12-16 04:12:37

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!

4
répondu Ole Spaarmann 2012-07-10 14:47:57

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

2
répondu Gishu 2017-05-23 12:00:14