Dank einiger Antworten auf dieser Site habe ich eine Funktion zum Überprüfen einer Ganzzahl in einer Eingabeaufforderung in Javascript erstellt. Ich habe herausgefunden, wie man isNaN
und das Ergebnis von %
verwendet, um meine Anforderungen zu erfüllen, aber es muss etwas falsch sein, da es immer noch nicht funktioniert: Diese Funktion zur Validierung muss nur Ganzzahlen akzeptieren. Als zusätzlichen Bonus wird auch ein spezielles Schlüsselwort akzeptiert, das später im Programm für einen anderen Zweck verwendet wird.
Also hatte ich vorher definiert:
var value = prompt("Type an integer");
Danach habe ich die Validierungsfunktion aufgerufen, und das beinhaltete drei Bedingungen: Die Validierungswarnung würde springen, wenn:
1) Die Zeichenfolge ist keine Zahl
2) Die Zeichenfolge% 1 ist nicht 0 (bedeutet, dass es sich nicht um eine Ganzzahl handelt)
3) Die Zeichenfolge ist nicht das spezielle Schlüsselwort ("extra"), das auch als Eingabe gültig ist.
Die Funktion muss eine Schleife ausführen und die Eingabeaufforderung so lange anzeigen, bis gültige Daten geschrieben wurden.
while (isNaN(value) == true && value % 1 != 0 && value != "extra") {
alert("Please, type an integer");
var value = prompt("Type an integer");
}
Was mache ich falsch? Vielen Dank für alle Ideen. Ich weiß, dass die Ganzzahlvalidierung hier schon oft gefragt wurde, und hier habe ich ein paar Ideen, aber mir fehlt möglicherweise etwas ...
4 Antworten
Möglicherweise erschweren Sie die Dinge zu sehr ... Ein kurzer regulärer Ausdruck reicht aus.
while (!/^(\d+|extra)$/i.test(value)) {
...
}
jsFiddle Beispiel
var int = 10;
var str = "10";
var isInt = function(value) {
return (str === 'extra' || !isNaN(parseInt(value, 16)) || /^\d+$/.test(value));
};
var isIntStrict = function(value) {
return (isInt(value) && typeof value !== 'string');
}
console.log('false', isInt('kirk'));
console.log('true', isInt(int));
console.log('true', isInt(str));
console.log('true', 'strict - int', isIntStrict(int));
console.log('false','strict - string', isIntStrict(str));
console.log('false','strict - string', isIntStrict('0x04'));
console.log('true','strict - string', isIntStrict(0x04));
Sie haben nur eine gleich bei eingegeben
isNaN(value) = true
Ich gehe davon aus, dass die Antwort von @elclanrs für Ihre Zwecke alles ist, was Sie hier brauchen. Sie ist die einfachste und unkomplizierteste, aber nur der Vollständigkeit halber und zweifelhaftem Lachen bin ich mir ziemlich sicher, dass das Folgende auch das tun würde, wonach Sie suchen:
function isAnIntOrExtra(v) {
if (parseInt(+v) === +v && v !== '') {
return parseInt(+v);
}
else if (v === 'extra') {
return v;
}
else {
return false;
}
}
Diese sollten alle eine Ganzzahl in Dezimalschreibweise übergeben und zurückgeben:
- '387' gibt
387
zurück - '-4' gibt
-4
zurück - '0' gibt
0
zurück - '2.4e3' gibt
2400
zurück - '0xf4' gibt
244
zurück
Während diese alle scheitern sollten:
- '4.5' gibt
false
zurück - '2.4e-3' gibt
false
zurück - '0xgc' gibt
false
zurück - '' gibt
false
zurück - 'sieben' gibt
false
zurück
Und das Zauberwort 'extra' gibt 'extra'
zurück
Natürlich wird es mit Werten wie '1,345' kläglich "scheitern" und wahrscheinlich direkt über die Oktalschreibweise rollen und es so behandeln, als wäre es eine Dezimalschreibweise (abhängig von der JavaScript-Engine?), Aber es könnte / em> sei optimiert, um auch mit diesen Situationen fertig zu werden, aber mit dem regulären Ausdruck bist du wirklich besser dran.