43

我很惭愧地问这个问题,因为它看起来应该很明显,但是如何判断字符串中的给定字符在 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

有什么更惯用的吗?

4

6 回答 6

54

使用正则表达式模式:[AZ] 或:

/[[:upper:]]/.match(c)
于 2012-10-03T17:06:06.877 回答
31

我不认为有更惯用的东西。你唯一能做的——而不是将字符串作为参数传递——是猴子补丁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

使用上面评论者和猴子补丁建议的答案String中的方法,您可以这样做:

class String
  def is_upper?
    !!self.match(/\p{Upper}/)
  end

  def is_lower?
    !!self.match(/\p{Lower}/)
    # or: !self.is_upper?
  end
end
于 2012-10-03T17:06:11.417 回答
7

只需使用 if 语句,例如if c == c.upcaseor if c == c.downcase

于 2019-08-26T09:52:40.100 回答
6

字符串小写是什么意思?这是否意味着字符串仅包含小写字符或不包含任何大写字符?就我而言,我想要:

"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 上不受支持。

于 2015-07-18T23:04:52.733 回答
5

匹配转换不会模拟 libcisupper()islower()函数的功能,因为两者都应该返回false非 alpha。

范围似乎是对单个字符执行此操作的最简单方法。

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
于 2014-06-18T10:02:58.380 回答
4

验证字符是大写还是小写的最简单方法:

#Can be any character
char = 'a'
if char === char.capitalize then
  return 'Character is uppercase.'
else
  return 'Character is lowercase.'
end

这个非常简单if loop的方法可以通过检查它是否等于它的大写形式来确定一个字母的“大小写”。如果它已经是大写的,它显然是true.

于 2013-11-29T20:27:54.700 回答