Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 正在验证用户输入的PIN_Ruby - Fatal编程技术网

Ruby 正在验证用户输入的PIN

Ruby 正在验证用户输入的PIN,ruby,Ruby,您将如何重构此代码,以检查用户是否添加了4位以上的PIN码,从而使代码尽可能短 def has_pin? return self.pin.to_i > 1000 rescue nil false end 理想情况下,在用户创建时不使用AR验证,因为它们最初是在没有PIN的情况下创建的,但在某些特定情况下,可能会选择稍后添加它们 PS:由于某种原因,PIN被存储为字符串。我会选择: def pin_valid? pin.present? && pin.match

您将如何重构此代码,以检查用户是否添加了4位以上的PIN码,从而使代码尽可能短

def has_pin?
  return self.pin.to_i > 1000 rescue nil
  false
end
理想情况下,在用户创建时不使用AR验证,因为它们最初是在没有PIN的情况下创建的,但在某些特定情况下,可能会选择稍后添加它们

PS:由于某种原因,PIN被存储为字符串。

我会选择:

def pin_valid?
  pin.present? && pin.match?(/\A\d{4,}\z/)
end

为什么您的目标是让代码尽可能短?我总是希望我的代码尽可能容易理解。

我会选择:

def pin_valid?
  pin.present? && pin.match?(/\A\d{4,}\z/)
end

为什么您的目标是让代码尽可能短?我总是希望我的代码尽可能容易理解。

Pin不是数字,而是字符串。经验法则是:如果你不需要对它进行数学运算,不要将它存储为数字。使用RegExp匹配,也许--
self.pin=~/\d{4,}/
?另外,
有_pin?
对于任何异常都应该返回
false
,而您的代码返回
nil
@31piy
pin.size>=4
:耸耸肩:保存pin时处理数字验证。@SergioTulentsev--同意!这应该是正确的方法。非常有效的评论。有些用户没有PIN设置tho,因此.size将抛出未定义的方法。其他人的手机里有一些字母,我想他们在手机上按数字的时间太长了,手机输入的是字母而不是数字。这必须是用户证明:)Pin不是数字,而是字符串。经验法则是:如果你不需要对它进行数学运算,不要将它存储为数字。使用RegExp匹配,也许--
self.pin=~/\d{4,}/
?另外,
有_pin?
对于任何异常都应该返回
false
,而您的代码返回
nil
@31piy
pin.size>=4
:耸耸肩:保存pin时处理数字验证。@SergioTulentsev--同意!这应该是正确的方法。非常有效的评论。有些用户没有PIN设置tho,因此.size将抛出未定义的方法。其他人的手机里有一些字母,我想他们在手机上按数字的时间太长了,手机输入的是字母而不是数字。这必须是用户证明:)“尽可能容易理解”-为此,可能将正则表达式提取到至少有数字(pin,4)的
中,或者其他什么。也许只有我一个人,但我总是,总是被正则表达式绊倒。谢谢!费用呢?匹配正则表达式不会比.size或>1000贵一点吗?@NickM:是的,正则表达式比较慢。当你把它衡量为一个瓶颈时,你就会解决这个问题。我在高峰营业时间有超过1000-2000个房租,我负担不起这笔债务。虽然我这样问的原因主要不是性能,而是总体代码质量。@NickM:无论如何,不要做
.to\u i>1000
。这完全是错误的。这里有一个将被拒绝的有效pin:
0001
“尽可能容易理解”-为此,可能将正则表达式提取到一个至少有个数字(pin,4)的
中。也许只有我一个人,但我总是,总是被正则表达式绊倒。谢谢!费用呢?匹配正则表达式不会比.size或>1000贵一点吗?@NickM:是的,正则表达式比较慢。当你把它衡量为一个瓶颈时,你就会解决这个问题。我在高峰营业时间有超过1000-2000个房租,我负担不起这笔债务。虽然我这样问的原因主要不是性能,而是总体代码质量。@NickM:无论如何,不要做
.to\u i>1000
。这完全是错误的。以下是将被拒绝的有效pin:
0001