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));
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));
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. :)
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
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
.
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));
}
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.
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 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.