Убедитесь, что имя (из пользовательского ввода) содержит только буквы

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

in 'block in <main><code>': undefined method 'empty?' for nil:NilClass (NoMethodError)</code> <p> Это то, что у меня есть до сих пор:</p> <pre class="prettyprint linenums">loop do
 print "Please tell us your first name: "
 first_name = gets.chomp.capitalize!

 if first_name.empty? or first_name.nil?
 puts "No input. Please tell us your first name:"
 elsif first_name[0..-1].include?(0..9)
 puts "Numbers are an unacceptable character."
 puts "Please tell us your first name: "
 else
 break
 end
end

Если этот код медленный и/или подробный, я был бы признателен за улучшение. Заранее спасибо!

1 ответ

(1) Если поле ввода пуст, оно вернет nil, поэтому сначала вы должны проверить nil.

1.9.3-p547 :046 > first_name = gets.chomp.capitalize!

=> nil
1.9.3-p547 :047 > first_name
=> nil
1.9.3-p547 :048 > nil.empty?
NoMethodError: undefined method 'empty?' for nil:NilClass

(2) Чтобы узнать, содержит ли имя число, можно использовать регулярное выражение. Он имеет хорошую расширяемость.

1.9.3-p547 :053 > /[\d]/.match('jason123')
=> #<matchdata "1"="">
1.9.3-p547 :054 > /[\d]/.match('jason')
=> nil
</matchdata>

/[\d]/ представляет любое число. Если имя не имеет номера, оно вернет nil.

licensed under cc by-sa 3.0 with attribution.