我很惭愧地问这个,因为它似乎应该是显而易见的,但是如何判断字符串中的给定字符在Ruby中是大写还是小写?我在String
课程中看不到明显的固定解决方案。
我采用了以下方法,不考虑非ASCII代码:
def is_lower?(c)
c >= 'a' && c <= 'z'
end
def is_upper?(c)
! is_lower(c)
end
我考虑的其他事情是:
def is_lower?(c)
c != c.upcase
end
这有什么比较惯用的东西吗?
答案 0 :(得分:44)
使用正则表达式:[A-Z]或:
/[[:upper:]]/.match(c)
答案 1 :(得分:26)
我认为不存在更惯用的东西。你可以做的唯一事情 - 而不是传递字符串作为参数 - 是String
类的猴子补丁:
class String
def is_upper?
self == self.upcase
end
def is_lower?
self == self.downcase
end
end
"a".is_upper? #=> false
"A".is_upper? #=> true
使用上述评论者建议的the answer中的方法和猴子修补String
,您可以这样做:
class String
def is_upper?
!!self.match(/\p{Upper}/)
end
def is_lower?
!!self.match(/\p{Lower}/)
# or: !self.is_upper?
end
end
答案 2 :(得分:5)
字符串是小写是什么意思?这是否意味着字符串只包含小写字符或者它不包含任何大写字符?在我的情况下,我想:
"a2".is_lower? #=> true
..这导致我:
class String
def is_upper?
not self.match /[[:lower:]]/
end
def is_lower?
not self.match /[[:upper:]]/
end
end
请注意,/\p{Lower}/
可能更好,但在Ruby 1.8上不受支持。
答案 3 :(得分:3)
验证字符是大写还是小写的最简单方法:
#Can be any character
char = 'a'
if char === char.capitalize then
return 'Character is uppercase.'
else
return 'Character is lowercase.'
end
这个非常简单的if loop
可以通过检查它是否等于它的大写形式来确定一个字母的'case'。如果它已经是大写的,那么它显然是true
。
答案 4 :(得分:3)
匹配转化不会模拟libc isupper()
和islower()
函数的功能,因为两者都应返回非{alpha false
。
对于单个角色来说,范围似乎是最简单的方法。
class String
def islower?
return false if self.size > 1
('a'..'z').include? self
end
def isupper?
return false if self.size > 1
('A'..'Z').include? self
end
end
答案 5 :(得分:0)
只需使用if语句,例如if c == c.upcase
或if c == c.downcase
。