我找到了一个用于检查字符串是否为数字的代码。它工作正常。但我不是 了解它是如何工作的。任何人都可以解释它。
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
此外,我通过使用匹配找到了替代方法。
任何人都可以解释(===)运算符在这里做什么吗?这个怎么运作?还有其他替代方式吗?
答案 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