我正在尝试创建一个方法,要求用户创建一个像银行账户PIN一样的PIN号码。它只能是4个数字长度,并且输入的每个字符都必须是数字。我发现当我使用这段代码时:
puts "Please give us a 4 digit pin number for your account:"
@response = gets.chomp
unless @response.to_i.is_a?(Integer) && @response.to_str.length == 4
puts "Your response must be 4 numbers in length."
create_pin
else
@pin = @response.to_i
puts "Your pin has been set."
end
我希望它能按照我的偏好工作,因为.to_i方法会将'2134a'转换为2134。此外,如果字符串中没有整数,则记录值为0,而我需要的是false。
我找到了一篇非常有用的文章,但由于正则表达式的原因,在线程中变得非常复杂。这篇文章也被关闭,因为创建者不够明确:
所以我尝试清楚地说明,我正在尝试限制用户输入,使他们只能输入0到9的数字。像10^3这样的数学方程需要失败,负数如-1234也需要失败,我试图将它们限制在四位数字以内,就像任何密码一样。到目前为止,我完全被卡住了,还没有看到一种不包含大量正则表达式的方法。
也许我可以检查字符串中是否包含不可接受的字符列表。提前感谢您。
为了更好地表达并纠正我在第二段中写错的错误而进行了编辑。
nil
和false
实际上是唯一的false
。你的问题不在于nil
,而是以非数字字符开头的字符串在调用to_i
时会返回0
。你正在说将此字符串转换为Integer
,然后询问这是否是一个Integer
。答案显然是当然是,因为你刚刚把它变成了一个整数。 - engineersmnky