Подтвердить что ты не робот

Как я могу проверить, что слово уже в верхнем регистре в Ruby?

Я хочу, чтобы проверить, если слово УЖЕ все в верхнем регистре. И это может также включать числа.

Пример:

GO234 => yes
Go234 => no
4b9b3361

Ответ 1

Вы можете сравнить строку с той же строкой, но в верхнем регистре:

'go234' == 'go234'.upcase  #=> false
'GO234' == 'GO234'.upcase  #=> true

Надеюсь, что это поможет

Ответ 2

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

Итак, когда результат совпадения равен нулю, он уже в верхнем регистре, иначе что-то находится в нижнем регистре.

Спасибо @mu слишком коротко сказано, что мы должны использовать /\ p {Lower}/вместо этого, чтобы соответствовать строчным буквам, отличным от английского.

Ответ 3

Я использую решение @PeterWong, и он отлично работает, пока строка, которую вы проверяете, не содержит специальных символов (как указано в комментариях).

Однако, если вы хотите использовать его для строк типа "Überall", просто добавьте эту небольшую модификацию:

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

Удачи!

Ответ 4

Вы можете либо сравнить строку и string.upcase для равенства (как показано JCorc..)

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

ИЛИ

вы можете вызвать arg.upcase! и проверьте нуль. (Но это изменит исходный аргумент, поэтому вам может понадобиться создать копию)

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

Обновление: если вы хотите, чтобы это работало в unicode.. (многобайтный), то строка # upcase не будет работать, вам понадобится камень unicode-util, упомянутый в этот вопрос SO