Как я могу создать метод, который проверяет, начинается ли строка с заглавной буквы? - PullRequest
4 голосов
/ 07 ноября 2019

Пока у меня есть:

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

Проблема заключается в том, что он возвращает true для таких строк, как "12345", "£$%^&" и "9ball" и т. Д. Я бы хотел, чтобы тольковернуть true, если первый символ является заглавной буквой.

Ответы [ 4 ]

4 голосов
/ 07 ноября 2019

Вы можете использовать match? для возврата true, если первый символ является буквой в диапазоне от A до Z в верхнем или нижнем регистре:

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
1 голос
/ 07 ноября 2019

Я бы избегал диапазонов символов, если это возможно, потому что, не зная кодировку, вы никогда не сможете быть уверены, что находится в диапазоне. В вашем случае это не нужно. Простой

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

подойдет. См. здесь для определения классов символов POSIX.

1 голос
/ 07 ноября 2019

Вероятно, есть более хороший способ сделать это с помощью регулярных выражений, но, опираясь на этот рубин, вы можете создать массив заглавных букв:

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
0 голосов
/ 07 ноября 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...