到目前为止我有:
def capitalized?(str) str[0] == str[0].upcase end
这个问题是,它返回true的字符串,如"12345","£$%^&"和"9ball"等。我希望它只返回真,如果第一个字符是大写字母。
true
"12345"
"£$%^&"
"9ball"
zpf6vheq1#
如果第一个字符是A到Z范围内的字母(大写或非大写),则可以使用match?返回true:
A
Z
match?
def capitalized?(str) str.match?(/\A[A-Z]/) end p capitalized?("12345") # false p capitalized?("fooo") # false p capitalized?("Fooo") # true
也可以将正则表达式传递给start_with?:
start_with?
p 'Foo'.start_with?(/[A-Z]/) # true p 'foo'.start_with?(/[A-Z]/) # false
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
ncgqoxb03#
如果可能的话,我会避免使用字符范围,因为如果不知道编码,您永远无法确定范围中的内容。在您的情况下,这是不必要的。
/^[[:upper:]]/ =~ str
请参见here了解POSIX字符类的定义。
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
j8ag8udp5#
简单解决方案
def capitalized?(str) str == str.capitalize end
5条答案
按热度按时间zpf6vheq1#
如果第一个字符是
A
到Z
范围内的字母(大写或非大写),则可以使用match?
返回true:也可以将正则表达式传递给
start_with?
:mwg9r5ms2#
使用regex可能有更好的方法,但是保持这个ruby为基础,你可以创建一个大写字母数组:
然后,您可以检查您的第一个字母是否在该数组中:
或者短一点:
ncgqoxb03#
如果可能的话,我会避免使用字符范围,因为如果不知道编码,您永远无法确定范围中的内容。在您的情况下,这是不必要的。
请参见here了解POSIX字符类的定义。
qhhrdooz4#
j8ag8udp5#
简单解决方案