it-swarm-pt.tech

Como posso verificar se um Word já está em maiúsculas?

Quero poder verificar se um Word já está em maiúsculas. E também pode incluir números.

Exemplo:

GO234 => yes
Go234 => no
24
Jacob

Você pode comparar a sequência com a mesma, mas em maiúsculas:

'go234' == 'go234'.upcase  #=> false
'GO234' == 'GO234'.upcase  #=> true
47
JCorcuera
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 "µ">

Portanto, quando o resultado da partida é nulo, ele já está em maiúsculas, ou algo está em minúsculas.

Obrigado @mu é muito pouco mencionado que devemos usar/\ p {Lower}/para corresponder às letras minúsculas que não estão em inglês.

25
PeterWong

Estou usando a solução da @PeterWong e ela funciona muito bem, desde que a string com a qual você está verificando não contenha caracteres especiais (conforme apontado nos comentários).

No entanto, se você quiser usá-lo para strings como "Überall", basta adicionar esta ligeira modificação:

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">

Diverta-se!

4
Ole Spaarmann

Você pode comparar a string e string.upcase para igualdade (como mostrado por JCorc ..)

irb(main):007:0> str = "Go234"
=> "Go234"
irb(main):008:0> str == str.upcase
=> false

OR

você poderia chamar arg.upcase! e verifique se não há nada. (Mas isso modificará o argumento original, portanto, você precisará criar uma cópia)

irb(main):001:0> "GO234".upcase!
=> nil
irb(main):002:0> "Go234".upcase!
=> "GO234"

Atualização: se você quiser que isso funcione para unicode .. (vários bytes), a string # upcase não funcionará, você precisará da gem unicode-util mencionada em this SO pergunta

2
Gishu