2010-02-17 8 views

Répondre

1
if ((the_number >> 0) != the_number) { 
    // overflow... 
} 

Vous avez encore besoin d'un contrôle côté serveur car le côté client peut désactiver le Javascript, etc.

+0

@KennyTM - Si quelqu'un a seulement travaillé avec JavaScript et Java, il pourrait ne pas être familier avec les opérations de niveau inférieur comme les changements de bits - pourriez-vous donner une explication de ce que vous faites? OP ne sait pas assez pour savoir à quoi ressemblerait le débordement de 32 bits, donc une explication serait probablement utile. –

+0

Je suis familier avec le débordement de 32 bits. est-ce que javascript utilise explicitement des entiers 32 bits, ou est-ce ouvert à l'implémentation? – user267272

+0

@user: 11.7.2 L'opérateur Right Shift signé: "Le résultat est un entier signé de 32 bits." (Ref: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf) – kennytm

2

Vérifiez si le nombre est supérieur à 2147483647.

Par exemple:

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

Bon - peut être utile de mentionner que vous * devez * faire la validation d'entrée sur le backend Java ainsi que le frontal. –

+2

@SLaks: Vous devez peut-être également vérifier la borne inférieure (-2147483648). – kennytm

+0

il est signé, donc tout ce qui précède s'applique. pourquoi n'ai-je pas pensé à ça? – user267272

0

vérifier Just:

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

Oups, trop tard! – Phill