【发布时间】:2014-06-18 10:15:18
【问题描述】:
我正在尝试创建一种要求用户创建密码的方法,例如银行帐户密码。长度只能是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。同样,如果字符串中没有 Integer,它会将值记录为 0,这不是 false我需要它。
Test if a string is basically an integer in quotes using Ruby?
我发现了一个非常有用的帖子,但它似乎在对正则表达式的线程执行中变得相当复杂。这个帖子也被关闭了,因为作者不够具体:
Check if string contains only positive numbers in Ruby
所以我会尽量清楚,我试图限制用户输入,以便他们只能输入数字 0 到 9。像 10^3 这样的数学方程需要失败,以及像 -1234 这样的负数,并且我试图将它们限制为四位数,就像限制任何引脚的方式一样。到目前为止,我完全被难住了,还没有看到不包含一大堆正则表达式的方法。
也许我可以检查字符串是否包含不可接受的字符列表。
先谢谢了。
为了更好的措辞和纠正我在第二段中写的错误而进行了编辑。
【问题讨论】:
-
这是一个微不足道的正则表达式。就个人而言,我建议您花更多时间尝试弄清楚,或者向我们展示您的尝试。没有比这更容易的了,而且很容易搜索。
-
老实说,我不知道如何使用正则表达式。我想知道是否有像数字这样的特定方法? (这没有用)我可以运行,但我想我迟早要学习正则表达式。另外,我永远不知道我发布的代码是太多还是太少。我应该保持主题,但我永远不知道主题是什么,因为我的许多错误都与语法有关。
-
"它将值记录为 nil,这不是我需要的错误。"只是为了澄清
nil和false实际上是红宝石中唯一的false。您的问题不是nil,而是以非数字字符开头的String将在调用to_i时返回0。您是说将此字符串转换为Integer,然后询问这是Integer。答案当然是因为你刚刚成功了。 -
任何开发人员都必须具备正则表达式技能。
-
所以我注意到了。 wvandaal 和 hbejgel 都将我与 Rubular 联系起来。对于初学者来说,这似乎是一个很好的资源。另外,engineersmnky 你是对的,我的意思是输入 0 而不是 nil。当所有仅使用字母的引脚实际通过并保存为 0 时,我发现了这个问题。我将进行编辑以修复它。