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 ...

1
telex-wap 8 Okt. 2012 im 02:11

4 Antworten

Beste Antwort

Möglicherweise erschweren Sie die Dinge zu sehr ... Ein kurzer regulärer Ausdruck reicht aus.

while (!/^(\d+|extra)$/i.test(value)) {
  ...
}
1
elclanrs 7 Okt. 2012 im 22:20

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));
0
krg 7 Okt. 2012 im 23:06

Sie haben nur eine gleich bei eingegeben

isNaN(value) = true
1
A. Matías Quezada 7 Okt. 2012 im 22:20

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;
  }
}

Hier fummeln

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.

0
ultranaut 8 Okt. 2012 im 04:24