确保名称(来自用户输入)仅包含字母

时间:2014-08-22 01:23:43

标签: ruby

我试图编写一个代码,检查用户的输入是否留空或包含数字。另外,我收到.empty的错误?

    in `block in <main>': undefined method `empty?' for nil:NilClass (NoMethodError)

这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:0)

(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

/[\d]/代表任意数字。如果名称没有号码,则会返回nil