524 Stimmen

Wie überprüft man, ob eine Variable in JavaScript eine Ganzzahl ist?

Wie überprüfe ich in JavaScript, ob eine Variable eine Ganzzahl ist, und gebe einen Alert aus, wenn nicht? Ich habe es versucht, aber es funktioniert nicht:

            var data = 22;
            alert(NaN(data));

0voto

Moti Shriki Punkte 1

Nach einigen Erfolgen und Misserfolgen kam ich zu dieser Lösung:

const isInt = (value) => {
  return String(parseInt(value, 10)) === String(value)
}

Ich mochte die obige Idee, den Wert auf NaN zu überprüfen und parseFloat zu verwenden, aber als ich es in der React-Infrastruktur ausprobierte, funktionierte es aus irgendeinem Grund nicht.

Bearbeiten: Ich habe einen schöneren Weg gefunden, ohne Strings zu verwenden:

var isInt = function (str) {
  return str === '0' || !!~~str;
}

Ich denke, das ist die kürzeste Antwort. Vielleicht sogar die effizienteste, aber ich lasse mich gerne eines Besseren belehren. :)

0voto

Mikael Lepistö Punkte 16438

Lodash https://lodash.com/docs#isInteger (seit 4.0.0) verfügt über eine Funktion zum Überprüfen, ob eine Variable eine ganze Zahl ist:

_.isInteger(3);
//  true

_.isInteger(Number.MIN_VALUE);
//  false

_.isInteger(Infinity);
//  false

_.isInteger('3');
//  false

0voto

jahu Punkte 5137

Ich musste überprüfen, ob eine Variable (String oder Zahl) eine ganze Zahl ist, und verwendete diese Bedingung:

function isInt(a){
    return !isNaN(a) && parseInt(a) == parseFloat(a);
}

http://jsfiddle.net/e267369d/1/

Einige der anderen Antworten haben eine ähnliche Lösung (verlassen sich auf parseFloat in Kombination mit isNaN), aber meins sollte geradliniger und selbsterklärend sein.


Bearbeitung: Ich habe herausgefunden, dass meine Methode bei Zeichenfolgen mit Komma (wie "1,2") versagt und mir ist auch aufgefallen, dass in meinem speziellen Fall die Funktion scheitern soll, wenn eine Zeichenfolge keine gültige ganze Zahl ist (soll bei jeder Fließkommazahl scheitern, auch bei 1,0). Hier ist also meine Funktion Mk II:

function isInt(a){
    return !isNaN(a) && parseInt(a) == parseFloat(a) && (typeof a != 'string' || (a.indexOf('.') == -1 && a.indexOf(',') == -1));
}

http://jsfiddle.net/e267369d/3/

Natürlich, falls Sie tatsächlich möchten, dass die Funktion ganze Zahlen mit Nachkommastellen akzeptiert (1.0 usw.), können Sie jederzeit die Bedingung für den Punkt entfernen a.indexOf('.') == -1.

0voto

James Punkte 4481

So viele Optionen in den Antworten.

isNaN kann für reine Ganzzahlen knifflig sein und Sie benötigen immer noch andere Überprüfungen, die es überflüssig machen.
Number.isInteger() wird nicht offiziell von IE unterstützt (die meisten kümmern sich nicht darum, aber es gibt immer noch Nachzügler).

Ich habe am Ende etwas eigenes geschrieben:

function isInteger(valueToCheck) {
    return typeof valueToCheck !== 'undefined'
        && (valueToCheck === parseInt(valueToCheck, 10));
}

Test

let undefinedValue;
const testValues = [
    1,
    '',
    undefinedValue,
    1.1,
    '1',
    '1.1',
    '1-2',
    'bob',
    false,
    [],
    [1],
    {},
    {foo: 1}
];

testValues.forEach(value => {
    console.log(`${value} - ${isInteger(value)}`);
})

Ergebnisse:

1 - true
'' - false
undefined - false
1.1 - false
'1' - false
'1.1' - false
'1-2' - false
'bob' - false
false - false
[] - false
[1] - false
{} - false
{foo: 1} - false

Einige Testwerte sind übertrieben, aber ihre Existenz zeigt deutlich, dass nichts durchkommt. Möglicherweise könnten Sie die Überprüfung auf undefined in der Funktion weglassen, aber ich finde, dass undefinierte Dinge in JS seltsam sein können, daher fühlte ich mich sicherer, dass sie da sind.

-2voto

Prabhagaran Punkte 3340

Fügen Sie der Textbox die Klasse numOnly hinzu,

$(document).on("input", ".numOnly", function(e) {
    this.value = this.value.replace(/[^0-9\$]/g,'');
    if(this.value!=""){
      alert('Ganze Zahl.');
    }else{
      alert('Keine Ganze Zahl.');
   }
});

Es funktioniert für mich.. Probier mal diesen

Sie können keypress, keyup, keydown usw. anstelle von input verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X