Как я могу проверить слово уже все заглавные в Ruby? - PullRequest
24 голосов
/ 16 декабря 2011

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

Пример:

GO234 => yes
Go234 => no

Ответы [ 4 ]

45 голосов
/ 16 декабря 2011

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

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

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

25 голосов
/ 16 декабря 2011
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} / вместо того, чтобы сопоставлять неанглийские строчные буквы.

4 голосов
/ 10 июля 2012

Я использую решение от @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">

Веселись!

2 голосов
/ 16 декабря 2011

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

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

OR

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...