Ruby确定字母是否为大写

时间:2013-11-28 07:24:44

标签: ruby

问题非常简单,可能有数千个答案,但我正在寻找一些神奇的红宝石功能。

问题: To determine whether a letter is upcase or not i.e belongs to A-Z.

可能的解决方案:

array = ["A","B", ....., "Z"]
letter = "A"
is_upcase = array.include? letter

请注意,“1”不是大写字母。

是否有任何神奇的ruby函数可以用较少的代码解决问题?

6 个答案:

答案 0 :(得分:5)

您可以使用POSIX character classes

  • /[[:lower:]]/ - 小写字母字符
  • /[[:upper:]]/ - 大写字母

示例:

def which_case(letter)
  case letter
  when /[[:upper:]]/ then puts 'uppercase'
  when /[[:lower:]]/ then puts 'lowercase'
  else puts 'other'
  end
end

which_case('a') #=> lowercase
which_case('ä') #=> lowercase
which_case('A') #=> uppercase
which_case('Ä') #=> uppercase
which_case('1') #=> other

或者使用简单的if声明:

puts 'lowercase' if /[[:lower:]]/ =~ 'a'
#=> lowercase

答案 1 :(得分:2)

使用===

?> ('A'..'Z') === 'C'
=> true
>> ('A'..'Z') === 'c'
=> false
>> ('A'..'Z') === '1'
=> false
>> ('A'..'Z') === '&'
=> false
>> ('A'..'Z') === 'Z'
=> true

答案 2 :(得分:2)

'A' =~ /[A-Z]/ #=> 0 (boolean true)
'a' =~ /[A-Z]/ #=> nil (boolean false)

答案 3 :(得分:2)

也缺乏对变音符号,diacritcs等的支持,并且需要ActiveSupport,但我喜欢语法:

'A'.in?('A'..'Z')  # => true
'a'.in?('A'..'Z')  # => false

答案 4 :(得分:1)

def is_upcase? x 
  ('A'..'Z').cover? x
end

编辑:.cover?是1.9中的一个新功能,它通过仅检查端点来检查值是否在范围内。通过这种方式,计算机不需要将其转换为数组并将其存储在内存中,从而使其更快。

这基本上是写x >= 'A' && x <= 'Z'

的另一种方式

答案 5 :(得分:1)

x&gt; ='A'&amp;&amp; x&lt; ='Z'