Essayer de faire une validation frontale sur une entrée HTML au lieu de lancer une exception dans le backend Java.Détermine si la conversion d'une chaîne en un entier de 32 bits va déborder
Répondre
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.
Vérifiez si le nombre est supérieur à 2147483647
.
Par exemple:
if (parseInt(num, 10) > 2147483647)
//BAD!!!
Bon - peut être utile de mentionner que vous * devez * faire la validation d'entrée sur le backend Java ainsi que le frontal. –
@SLaks: Vous devez peut-être également vérifier la borne inférieure (-2147483648). – kennytm
il est signé, donc tout ce qui précède s'applique. pourquoi n'ai-je pas pensé à ça? – user267272
vérifier Just:
if (parseInt(myNumberAsString, 10) > 2147483647) { alert("Invalid int!"); }
Oups, trop tard! – Phill
@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. –
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
@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