到目前为止,我有:
def capitalized?(str)
str[0] == str[0].upcase
end
这是问题所在,因为它为诸如true
,"12345"
和"£$%^&"
等的字符串返回"9ball"
。我希望它仅在第一个字符时返回true是一个大写字母。
到目前为止,我有:
def capitalized?(str)
str[0] == str[0].upcase
end
这是问题所在,因为它为诸如true
,"12345"
和"£$%^&"
等的字符串返回"9ball"
。我希望它仅在第一个字符时返回true是一个大写字母。
如果第一个字符是介于match?
到A
范围内的大写字母,则可以使用Z
返回true:
def capitalized?(str)
str.match?(/\A[A-Z]/)
end
p capitalized?("12345") # false
p capitalized?("fooo") # false
p capitalized?("Fooo") # true
您还可以将正则表达式传递给start_with?
:
p 'Foo'.start_with?(/[A-Z]/) # true
p 'foo'.start_with?(/[A-Z]/) # false
,
使用正则表达式可能有更好的方法,但是保持此红宝石为基础,您可以制作一个大写字母数组:
capital_letters = ("A".."Z")
然后,您可以检查您的第一个字母是否在该数组中:
def capitalized?(str)
capital_letters = ("A".."Z")
capital_letters.include?(str[0])
end
或更短:
def capitalized?(str)
("A".."Z").include?(str[0])
end
,
如果可能的话,我会避免使用字符范围,因为在不知道编码的情况下,您永远无法确定范围内的内容。在您的情况下,这是不必要的。一个简单的
/^[[:upper:]]/ =~ str
会的。有关POSIX字符类的定义,请参见here。
,def capitalized?(str)
str[0] != str[0].downcase
end
capitalized? "Hello" #=> true
capitalized? "hello" #=> false
capitalized? "007,I presume" #=> false
capitalized? "$100 for that?" #=> false