Ruby实现is_numeric?对于Strings,需要更好的选择

Swa*_*and 10 ruby string numerical

我想验证字符串的"数字性"(它不是活动记录模型中的属性).我只需要它是一个有效的基数10,正整数字符串.我这样做:

class String
  def numeric?
    # Check if every character is a digit
    !!self.match(/\A[0-9]+\Z/)
  end
end

class String
  def numeric?
    # Check is there is *any* non-numeric character
    !self.match(/[^0-9]/)
  end
end
Run Code Online (Sandbox Code Playgroud)

哪一个更合理?或者,还有其他更好的实施吗?

Bkk*_*rad 10

请确保使用\A\Z,而不是^$,对于整个字符串匹配,而不是字符串中只有一行.如果要避免将字符串与结束换行符匹配,请在末尾使用"\ _".有关更多问题,请参阅锚点上的正则表达式教程.

例如,/^[0-9]+$/成功匹配以下内容:

foo
1234
bar
Run Code Online (Sandbox Code Playgroud)

/\A[0-9]+\Z/不是.


Aug*_*aas 5

第一个看起来很明智.

不过,我给这个方法命名了numeric?.我不是is_foo?方法的忠实粉丝.它们在方法名称(is_foo,isFoo)中没有问号的语言中有意义,但带有问号,is感觉多余.