За счет крошечного кусочка магии сообразительности / регулярного выражения, что-то вроде следующего позволит вам проверить не только то, является ли строка числовой (первый критерий для того, чтобы быть действительным годом), но и находится ли она в пределах определенный диапазон лет:
def is_valid_year?(date_str, start=1900, end=2099)
date_str.grep(/^(\d)+$/) {|date_str| (start..end).include?(date_str.to_i) }.first
end
Вышеприведенная функция возвращает nil
для любой строки с нечисловыми символами, false
для тех, которые являются числовыми, но выходят за пределы указанного диапазона, и true
для допустимых строк года.