2010-02-17 4 views

답변

1
if ((the_number >> 0) != the_number) { 
    // overflow... 
} 
등 클라이언트 측 자바 스크립트를 해제 할 수 있기 때문에 당신은 여전히 ​​서버 측의 확인이 필요

,

+0

@KennyTM - 누군가 JavaScript 및 Java에서만 작업 한 경우 비트 이동과 같은 하위 수준의 작업에 익숙하지 않을 수 있습니다. 현재 수행중인 작업에 대한 설명을 만들 수 있습니까? OP는 32 비트 오버 플로우가 어떻게 생겼는지 알지 못하므로 설명이 도움이 될 것입니다. –

+0

32 비트 오버플로에 익숙합니다. javascript가 32 비트 정수를 명시 적으로 사용합니까? 아니면 구현이 가능합니까? – user267272

+0

@user : 11.7.2 부호있는 오른쪽 시프트 연산자 : "결과는 부호있는 32 비트 정수입니다." (Ref : http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf) – kennytm

2

숫자가 2147483647 이상인지 확인하십시오. 예를 들어

:

if (parseInt(num, 10) > 2147483647) 
    //BAD!!! 
+1

좋은 점은 프론트 엔드뿐만 아니라 Java 백엔드에서도 입력 유효성 검사를 수행해야 함을 언급하는 것입니다. –

+2

@SLaks : 아마도 하한 (-2147483648)도 확인해야 할 것입니다. – kennytm

+0

이 서명되어 있으므로 위의 모든 내용이 적용됩니다. 왜 내가 이걸 생각하지 않았 니? – user267272

0

그냥 확인 :

if (parseInt(myNumberAsString, 10) > 2147483647) { alert("Invalid int!"); } 
+0

너무 늦었습니다! – Phill