Frage Wie erlaubt man nur Zahlen zwischen 0 bis 30 oder A, D Zeichen in Eingabe mit Javascript?


Hi Ich habe eine JavaScript-Funktion erstellt, um nur Zahlen zwischen 0 bis 30 und Zeichen A und D zuzulassen. Ich gebe eine Warnung, wenn sie nicht den Kriterien entspricht, aber wenn der Benutzer ok auf die Warnung klickt, bleiben die Werte in der Eingabe und können in der Datenbank aktualisiert werden. Ich möchte, dass dieser Benutzer nichts in der Eingabebox eingeben darf, außer Zeichen A, D und Zahlen zwischen 0 und 30, wie es bei Eingabetyp = Zahl der Fall ist, wir können nur Zahlen eingeben. Meine JavaScript-Funktion ist: -

function validate() {
    var regex = /[ad0-9]/gi;
    var txt = document.getElementById('txt').value;
    var valid = true;
    var error = '';
    if (regex.test(txt)) {
        if (!isNaN(txt)) {
            if (!(parseInt(txt) >= 0 && parseInt(txt) <= 30)) {
                valid = false;
                error = 'Please enter between 0 to 30.'
            }
        }
    }
    else {
        valid = false;
        error = 'Please enter between 0 to 30, A or D'
    }

    if (!valid) {
        alert(error);
    }
}

Das JavaScript funktioniert gut mit der Validierung, aber nach dem Klicken auf OK in Alert-Wert bleibt immer noch dort und es gibt auch einen Fehler, wenn das Eingabefeld leer ist, um dies zu vermeiden. Gibt es einen anderen besseren Weg, um die Funktion zu erstellen, oder kann es mit jQuery getan werden. Ich bin neu in jQuery, wenn es möglich ist, es mit jQuery zu tun, wäre es großartig. Ich wäre sehr dankbar, wenn jemand helfen kann.


5
2018-03-12 11:43


Ursprung


Antworten:


Sie können dieses Codebeispiel ausprobieren.

function validate(box) {
  var val = box.value;
  if (!/^[AD]?$/.test(val) && isNaN(val) || (0 > val || 30 < val)) {
    box.value = '';
    alert('Only A or D or 0-30');
  }
}
<input type='text' value='30' onblur='validate(this);' />


2
2018-03-12 13:14



Die beste Lösung wäre, es in dem Moment zu überprüfen, in dem Sie es in die Datenbank einfügen.


0
2018-03-12 12:28



if(txt.replace(/ /g, '').length == 0) {
    // text is empty
    return; // get out of function
}

Wenn Sie sicherstellen möchten, dass kein Fehler vorliegt, wenn der Text leer ist, können Sie dies tun. Das .replace Teil ist sicherzustellen, dass, wenn die Texteingabe nur mit Leerzeichen gefüllt ist, diese leer ist.

Mit dem Rest der Funktion:

function validate() {
    var regex = /[ad0-9]/gi;
    var txt = document.getElementById('txt').value;
    var valid = true;
    var error = '';
    if(txt.replace(/ /g, '').length == 0) {
        // text is empty
        return; // get out of function
    }
    if (regex.test(txt)) {
        if (!isNaN(txt)) {
            if (!(parseInt(txt) >= 0 && parseInt(txt) <= 30)) {
                valid = false;
                error = 'Please enter between 0 to 30.'
            }
        }
    }
    else {
        valid = false;
        error = 'Please enter between 0 to 30, A or D'
    }

    if (!valid) {
        alert(error);
    }
}

0
2018-03-12 11:52



Wie wäre es mit dem Ersetzen von unzulässigen Werten, so dass nur die gewünschte Eingabe erlaubt ist. Damit können Sie nur A, D und die Ziffern 0 - 30 eingeben:

$('input').on('input', function(e) {
  this.value = this.value
    .replace(/[^AD\d]/, '')
    .replace(/(3)[1-9]/, '$1')
    .replace(/(30)[0-9]/, '$1')
    .replace(/([4-9])[0-9]/, '$1')
    .replace(/([\d][\d])[\d]/, '$1');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type="text" />

Beachten Sie, dass es immer noch eine gute Idee ist, eine serverseitige Validierung durchzuführen.


0
2018-03-12 12:45