0

文字列が数値かどうかをチェックするコードを見つけました。そして、それはうまくいきます。しかし、私はそれがどのように機能しているのかわかりません。誰でも説明できますか。

    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

また、マッチを使用してこれを行う別の方法を見つけました。

ここで (===) 演算子が何をしているのか、誰か説明できますか? 使い方?他の代替方法はありますか?

4

2 に答える 2

3

Ruby では、演算子のオーバーロードを使用して各演算子の動作を定義できますが、これは演算子の左側のクラスで行う必要があります。

Regexpこのメソッドは、オブジェクト クラスの Ruby 標準ライブラリで定義されています。参照: 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

于 2012-09-05T08:02:46.887 に答える
1
def is_numeric?(str)
  str =~ /^[\d]+(\.[\d]+){0,1}$/
end
于 2012-09-05T08:02:55.380 に答える