RoR:检查数值

时间:2012-09-05 07:56:45

标签: ruby-on-rails ruby regex

我找到了一个用于检查字符串是否为数字的代码。它工作正常。但我不是 了解它是如何工作的。任何人都可以解释它。

    str = "12132344", str1="abcd", str2="12213234.132332"

    /^[\d]+(\.[\d]+){0,1}$/ === str  #=> true  //perfect
    /^[\d]+(\.[\d]+){0,1}$/ === str1 #=> false //perfect
    /^[\d]+(\.[\d]+){0,1}$/ === str2 #=. true  //perfect

当我改变比较如下:

    str === /^[\d]+(\.[\d]+){0,1}$/ #=>  false
    str1 === /^[\d]+(\.[\d]+){0,1}$/ #=> false
    str2 === /^[\d]+(\.[\d]+){0,1}$/ #=> false

此外,我通过使用匹配找到了替代方法。

任何人都可以解释(===)运算符在这里做什么吗?这个怎么运作?还有其他替代方式吗?

2 个答案:

答案 0 :(得分:3)

在Ruby中,运算符重载可用于定义每个运算符的作用,但必须由运算符左侧的类完成。

此方法在Ruby标准库中为Regexp对象类定义。参考:http://www.ruby-doc.org/core-1.9.3/Regexp.html#method-i-3D-3D-3D

它只适用于左侧的Regexp类(即模式),因为它被定义为仅在Regexp类中以这种方式工作。

在这种情况下,Regexp===定义为=~的同义词,它与给定正则表达式模式的字符串匹配。

String类将===运算符定义为相等运算符。这意味着如果右侧参数不是字符串,则返回false,否则仅当两个字符串匹配时才返回true。参考:http://www.ruby-doc.org/core-1.9.3/String.html#method-i-3D-3D-3D

答案 1 :(得分:1)

def is_numeric?(str)
  str =~ /^[\d]+(\.[\d]+){0,1}$/
end