2012-09-05 7 views
0

문자열이 숫자인지 확인하는 코드를 찾았습니다. 그리고 그것은 잘 작동합니다. 그러나 나는 그것이 작동하는 방법을 얻는 것 가 아니다. 아무도 그것을 설명 할 수 있습니다.RoR : 숫자 값 확인

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

http://stackoverflow.com/questions/3025838/what-is-the-operator-in-ruby – rjz

답변

3

루비에서는 연산자 오버로딩을 사용하여 각 연산자가하는 것을 정의 할 수 있지만 연산자의 왼쪽에있는 클래스에 의해 수행되어야합니다.

이 방법은 Regexp 객체 클래스에 대한 Ruby 표준 라이브러리에 정의되어 있습니다. 참조 : http://www.ruby-doc.org/core-1.9.3/Regexp.html#method-i-3D-3D-3D.

Regexp 클래스에서만 작동하도록 정의 되었기 때문에 왼쪽의 Regexp 클래스 (패턴)와 함께 작동합니다.

이 경우 Regexp=~의 동의어로 ===을 정의하며 정규 표현식 패턴이 지정된 문자열과 일치합니다.

String 클래스는 === 연산자를 항등 연산자로 정의합니다. 즉, 오른쪽 인수가 문자열이 아닌 경우 false를 반환하고, 그렇지 않으면 두 문자열이 일치하는 경우에만 true를 반환합니다. 참고 :이 기능은 1.9.2에 속하는 http://www.ruby-doc.org/core-1.9.3/String.html#method-i-3D-3D-3D

+0

인가요 ??? 나는 1.8.7 루비 엔터프라이즈 에디션을 사용하고있다. – codeit

+0

1.8.7에서는 문서를 확인해야하지만 일반적으로 많은 부분이 동일하게 유지됩니다. – ronalchn

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