Ruby:如何判断字符是大写/小写

时间:2012-10-03 16:57:30

标签: ruby

我很惭愧地问这个,因为它似乎应该是显而易见的,但是如何判断字符串中的给定字符在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

这有什么比较惯用的东西吗?

6 个答案:

答案 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.upcaseif c == c.downcase