Replace bei Keyup, Paste, ... (gültige Uhrzeit)

k3nguruh

Erfahrenes Mitglied
Hallo,

ich möchte bereits bei der Eingabe in einem Input-Feld prüfen, ob es sich um eine reguläre Zeit (HH:ii oder HH:ii:ss) handelt. Ansonsten soll die Fehleingabe wieder gelöscht werden.

Mit den "Pattern" bin ich nicht so bewandert, daher prüfe ich erstmal nur, ob Zahlen bzw. Doppelpunkt vorhanden sind.
Javascript:
        _replace: function() {
            //setTimeout(
            //    $.proxy(
            //        function() {
                        this.element
                            .val(function() {
                                return $(this).val().replace(/[^0-9:]/g, '');
                            });
            //        }, this
            //    )
            //, 100);
        },
Bloss dabei sind halt auch Eingaben wie 44:66 usw. möglich.

Eine Überlegung hatte ich dann noch:
Wenn ich auf die Länge der Eingabe prüfe (zum Bsp. mit switch) könnte man bei der
Länge von 1 auf Eingabe 0-2 prüfen
Länge von 2 auf Eingabe 0-3 prüfen usw.

Nur frage ich mich halt, ob dass nich einfacher geht.

Danke schon mal für eure Antworten
 
Ich würde es auch nicht mit Regex machen, sondern den String mit split() zerteilen und dann die einzelnen Komponenten prüfen.
 
Hallo,
äähhmm wie soll ich den denn Teilen?
Es soll ja nach jeden keyup (event) geprüft werden.....
Wenn zum Bsp. "2w" eingegeben wird, soll das "w" wieder gelöscht werden. Genauso bei 22:3w usw.
 
Etwa so hatte ich es mir vorgestellt:
Javascript:
var arr = dein_eingabestring.split(":");
if (arr.length !=2 && arr.length !=3) return false;
if (! parseInt(arr[0]) <= 24) return false;
if (! parseInt(arr[1]) <= 60) return false;
if (arr.length == 3) if (parseInt(arr[2]) <= 60) return false;
return true;
 
Zuletzt bearbeitet von einem Moderator:
PS: Jetzt verstehe ich dich erst: Du willst bei jedem keyup prüfen, d. h. wenn der String noch gar nicht vollständig ist. Dann müsste man es vielleicht so machen:

Code:
=javascript]var arr = dein_eingabestring.split(":");
if (arr.length > 3) return false;
if (arr.length >= 1) if (! parseInt(arr[0]) <= 24) return false;
if (arr.length >= 2) if (! parseInt(arr[1]) <= 60) return false;
if (arr.length == 3) if (parseInt(arr[2]) <= 60) return false;
return true;
 
Zuletzt bearbeitet von einem Moderator:
Grundsätzlich sieht das Pattern dafür wie folgt aus:
Javascript:
var pattern = /^([0-1][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/;
Problematisch ist hierbei jedoch, dass das Pattern nur dann gültig ist, wenn die komplette Zeichenkette bereits angegeben wurde.

In der Monsteredition, die auch für Teilstücke gültig ist, sieht das dann wie folgt aus:
Javascript:
var pattern = /^(([0-2])|([0-1][0-9]|2[0-3])|((?:[0-1][0-9]|2[0-3]):)|((?:[0-1][0-9]|2[0-3]):[0-5])|((?:[0-1][0-9]|2[0-3]):[0-5][0-9])|((?:[0-1][0-9]|2[0-3]):[0-5][0-9]:)|((?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5])|((?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]))$/;

Und wenn man viel Spaß an so etwas hat, kann man auch noch nette Gimmicks hinzufügen.
 
Zuletzt bearbeitet:
Zurück