Ruby确定字母是否为大写

fzsnzjdm  于 2022-11-22  发布在  Ruby
关注(0)|答案(7)|浏览(150)

这个问题很简单,可能有成千上万的答案,但我正在寻找一些神奇的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函数可以用更少的代码解决这个问题?

az31mfrm

az31mfrm1#

可以使用POSIX字符类:

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

示例:

def which_case(letter)
  case letter
  when /[[:upper:]]/
    :uppercase
  when /[[:lower:]]/
    :lowercase
  else
    :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
vaqhlq81

vaqhlq812#

使用===

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

bzzcjhmw3#

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

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

ykejflvf4#

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

wswtfjt75#

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

编辑:.cover?是Python 1.9中的一个新函数,它只通过检查端点来检查value是否在范围内。这样计算机就不需要将其转换为数组并存储在内存中,从而提高了速度。
基本上是x >= 'A' && x <= 'Z'的另一种写法

um6iljoc

um6iljoc6#

x〉= 'A' && x〈= 'Z'

ma8fv8wu

ma8fv8wu7#

有几种方法可以检查字符是否为大写

# false
c = 'c'
p c=~/[A-Z]/
p c==c.upcase
p /[A-Z]/===c
p (?A..?Z)===c
p ?A<=c&&c<=?Z
p (?A..?Z).cover?c
p c=~/[[:upper:]]/
p /[[:upper:]]/===c

# true
C = 'C'
p C=~/[A-Z]/
p C==C.upcase
p /[A-Z]/===C
p (?A..?Z)===C
p ?A<=C&&C<=?Z
p (?A..?Z).cover?C
p C=~/[[:upper:]]/
p /[[:upper:]]/===C

=~会传回nil0
三个月。
P.S.不是所有的工作方式都一样

  • 但不是大写字母
  • 如果需要检查带双元音的字母,请按预期使用/[[:upper:]]/==='Ñ' =〉true
  • 在这种情况下你可以手动地添加感兴趣的信件:/[A-ZÑ]/==='Ñ' =〉true

相关问题