Ich habe ein Textfeld, in das ein Benutzer sein Alter eingeben kann. Ich versuche, mit JavaScript eine clientseitige Validierung für dieses Feld durchzuführen. Ich habe bereits eine serverseitige Validierung eingerichtet. Ich kann jedoch nicht überprüfen, ob der Benutzer eine tatsächliche Ganzzahl eingibt. Ich versuche derzeit den folgenden Code:
function IsValidAge(value) {
if (value.length == 0) {
return false;
}
var intValue = parseInt(value);
if (intValue == Number.NaN) {
return false;
}
if (intValue <= 0)
{
return false;
}
return true;
}
Das Seltsame ist, ich habe einzelne Zeichen wie "b" in das Textfeld eingegeben und diese Methode gibt true zurück. Wie stelle ich sicher, dass der Benutzer nur eine Ganzzahl eingibt?
Vielen Dank
javascript
user70192
quelle
quelle
Number.isNaN()
oderisNaN()
um am klarsten zu bestimmen, ob ein Wert vorliegtNaN
.Antworten:
AKTUALISIEREN
Ich habe den Code festgelegt , die einen Fehler hatte und fügte hinzu , ein var genannt Schlüssel den Schlüssel zu speichern gedrückt Code keyCode und welche , die des Browsers ab.
var key = e.which || e.keyCode;
Danke Donald.McLean :)
Wenn Sie überprüfen möchten, ob Sie während der Eingabe Zahlen schreiben (und vermeiden, andere Zeichen in Ihr Eingabefeld zu schreiben), können Sie diese einfache Funktion verwenden und die zulässigen Elemente definieren (dies schließt alles ein, was Sie filtern möchten). Auf diese Weise können Sie nicht nur Ganzzahlen, sondern beispielsweise eine bestimmte Gruppe von Zeichen auswählen. Das Beispiel basiert auf jQuery, um es an ein Eingabefeld anzuhängen.
$('#myInputField').keypress(function(e) { var key = e.which || e.keyCode; if (!(key >= 48 && key <= 57) && // Interval of values (0-9) (key !== 8) && // Backspace (key !== 9) && // Horizontal tab (key !== 37) && // Percentage (key !== 39) && // Single quotes (') (key !== 46)) // Dot { e.preventDefault(); return false; } });
Wenn Sie einen anderen als den definierten Schlüssel verwenden, wird dieser nicht im Feld angezeigt. Und weil Angular.js heutzutage stark wird. Dies ist die Anweisung, die Sie erstellen können, um dies in einem beliebigen Bereich Ihrer Web-App zu tun:
myApp.directive('integer', function() { return function (scope, element, attrs) { element.bind('keydown', function(e) { var key = e.which || e.keyCode; if (!(key >= 48 && key <= 57) && // Interval (0-9) (key !== 8) && // Backspace (key !== 9) && // Horizontal tab (key !== 37) && // Percentage (key !== 39) && // Single quotes (') (key !== 46)) // Dot { e.preventDefault(); return false; } }); } });
Aber was passiert, wenn Sie
ng-repeat
diese Richtlinie verwenden möchten und sie nur in einer bestimmten Anzahl von Feldern anwenden müssen? Nun, Sie können die obere Direktive in eine Direktive umwandeln, die bereit ist, einen wahren oder falschen Wert zuzulassen , um entscheiden zu können, welches Feld davon betroffen sein wird.myApp.directive('rsInteger', function() { return { restrict: 'A', link: function (scope, element, attrs) { if (attrs.rsInteger === 'true') { element.bind('keydown', function(e) { var key = e.which || e.keyCode; if (!(key >= 48 && key <= 57) && // Interval (0-9) (key !== 8) && // Backspace (key !== 9) && // Horizontal tab (key !== 37) && // Percentage (key !== 39) && // Single quotes (') (key !== 46)) // Dot { e.preventDefault(); return false; } }); } } } });
Um diese neue Direktive zu verwenden, müssen Sie sie nur in einem Text vom Typ Eingabe eingeben, zum Beispiel:
<input type="text" rs-integer="true">
Hoffe es hilft dir.
quelle
var intRegex = /^\d+$/; if(intRegex.test(someNumber)) { alert('I am an int'); ... }
Das wird absolut positiv scheitern, wenn der Benutzer etwas anderes als eine nichtnegative Ganzzahl eingibt.
quelle
Verwenden Sie für eine echte Int-Überprüfung Folgendes:
function isInt(value) { return !isNaN(parseInt(value,10)) && (parseFloat(value,10) == parseInt(value,10)); }
Das Problem bei vielen int-Prüfungen besteht darin, dass sie für 1.0 'false' zurückgeben, was eine gültige Ganzzahl ist. Diese Methode überprüft, ob der Wert von float und int parsing gleich ist. Für # .00 wird also true zurückgegeben.
AKTUALISIEREN:
In den Kommentaren, die ich der Antwort für zukünftige Leser hinzufügen werde, wurden zwei Themen erörtert:
Meine Empfehlung und Praxis, eine Bibliothek wie Globalize.js zu verwenden, um numerische Werte für / von der Benutzeroberfläche anstelle der Browser-Implementierung zu analysieren und die nativen Aufrufe nur für bekannte "programmgesteuert" bereitgestellte Werte zu verwenden, z. B. eine aus einem XML-Dokument analysierte Zeichenfolge .
quelle
function isInt(value) { return !isNaN(parseInt(value, 10)) && parseInt(value, 10) == parseFloat(value); }
Sollte in den oben genannten Fällen funktionieren.isInt('5a') == true
!toString
Methode sowohl des ursprünglichen als auch des transformierten Werts hinzugefügt :var isint = function (a) { return ((parseInt(a) === parseFloat(a)) && (a.toString() === parseInt(a).toString())); }
benutze isNaN (n)
dh
if(isNaN(intValue))
anstelle von
if (intValue == Number.NaN)
quelle
Ich habe dies getan, um nach Zahl und ganzzahligem Wert zu suchen
if(isNaN(field_value * 1) || (field_value % 1) != 0 ) not integer; else integer;
Modulare Abteilung
Beispiel
1. 25,5% 1! = 0 und
2. 25% 1 == 0
Und wenn (field_value * 1) NaN wenn Zeichenfolge zB: 25,34 oder abcd etc ... sonst Ganzzahl oder Zahl
quelle
quelle
Wenn Ihre Nummer im 32-Bit-Ganzzahlbereich liegt, können Sie Folgendes wählen:
function isInt(x) { return ""+(x|0)==""+x; }
Der bitweise oder Operator erzwingt die Konvertierung in vorzeichenbehaftete 32-Bit-Int. Die Zeichenfolgenkonvertierung auf beiden Seiten stellt sicher, dass true / false übereinstimmen möchten.
quelle
Niemand hat diese einfache Sache versucht?
function isInt(value) { return value == parseInt(value, 10); }
Was stimmt damit nicht?
quelle
Sie dürfen
isInteger()
Verfahren vonNumber
Objektif ( (new Number(x)).isInteger() ) { // handle integer }
Diese Methode funktioniert einwandfrei, wenn
x
istundefined
odernull
. Aber es hat Unterstützung schlechte Browser jetztquelle
Ich habe festgestellt, dass die NaN-Antworten fehlen, weil sie keine nachgestellten Zeichen erfassen (daher wird "123abc" als gültige Zahl angesehen). Daher habe ich versucht, die Zeichenfolge in eine Ganzzahl und zurück in eine Zeichenfolge zu konvertieren und sicherzustellen, dass sie nach der Konvertierung mit dem Original übereinstimmt ::
if ("" + parseInt(stringVal, 10) == stringVal) { alert("is valid number"); }
Dies funktionierte für mich, bis die Zahlen so groß waren, dass sie während der Konvertierung als wissenschaftliche Notation erschienen.
... das bedeutet natürlich, dass Sie eine Zahl in wissenschaftlicher Notation eingeben können, aber die Überprüfung von Minimal- und Maximalwerten würde dies verhindern, wenn Sie dies wünschen.
Es wird natürlich fehlschlagen, wenn Sie Trennzeichen verwenden (wie "1.000" oder "1.000", abhängig von Ihrem Gebietsschema) - Ziffern sind nur hier zulässig.
quelle
If (enteredAge < "1" || enteredAge > "130") ......
Einfach und es funktioniert ... bis sie Unsterblichkeit entwickeln
quelle