ruby 如何创建一个方法来检查字符串是否以大写字母开头?

kgqe7b3p  于 2023-01-04  发布在  Ruby
关注(0)|答案(5)|浏览(99)

到目前为止我有:

def capitalized?(str)
  str[0] == str[0].upcase
end

这个问题是,它返回true的字符串,如"12345""£$%^&""9ball"等。我希望它只返回真,如果第一个字符是大写字母。

zpf6vheq

zpf6vheq1#

如果第一个字符是AZ范围内的字母(大写或非大写),则可以使用match?返回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
mwg9r5ms

mwg9r5ms2#

使用regex可能有更好的方法,但是保持这个ruby为基础,你可以创建一个大写字母数组:

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
ncgqoxb0

ncgqoxb03#

如果可能的话,我会避免使用字符范围,因为如果不知道编码,您永远无法确定范围中的内容。在您的情况下,这是不必要的。

/^[[:upper:]]/ =~ str

请参见here了解POSIX字符类的定义。

qhhrdooz

qhhrdooz4#

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
j8ag8udp

j8ag8udp5#

简单解决方案

def capitalized?(str)
   str == str.capitalize 
 end

相关问题