JavaScript Check time
Hannes Weninger
- javascript
0 Tabellenkalk0 dedlfix0 MudGuard
Hallo,
ich habe eine Funktion, die mit checken soll, ob eine Zeit folgendes Format hat:
02:00 01:30 00:30
Meine Funtion functioniert mit allen Zeiten über einer Stunde, 00:30 funktioniert zum Beispiel nicht. Meine Frage wäre jetzt, wie ich den regex ausdruck ändern muss, damit das auch geht.
Danke Hannes
Hallo,
wenn ich das korrekt lese, hat das nix mit dem Regex zu tun, sondern einfach damit, dass die Stundenzahl größer als null sein soll.
Gruß
Kalk
Tach!
ich habe eine Funktion, die mit checken soll, ob eine Zeit folgendes Format hat:
02:00 01:30 00:30
Meine Funtion functioniert mit allen Zeiten über einer Stunde, 00:30 funktioniert zum Beispiel nicht.
if (hours > 0 && hours < 24 && minutes >= 0 && minutes < 60) {
$scope.validState = true;
return true;
}
$scope.validState = false;
return false;
Wenn 0 ein gültiger Wert für Stunde ist, dann darf die Prüfung nicht 0 ausschließen, sondern muss wie bei den Minuten >=
lauten.
Außerdem machst du es umständlicher als notwendig. Zum einen sollte die Funktion keine Werte außerhalb ändern, sondern nur ein Ergebnis zurückliefern. Das Konstrukt lässt sich damit eindampfen zu:
return hours >= 0 && hours < 24 && minutes >= 0 && minutes < 60;
[0-9]
kann in einem Regexp auch als \d geschrieben werden (d wie digit). Auch der Regex-Test sollte $scope.validState nicht setzen.
Damit hast du nun aber ein anderes Problem, das sich wie folgt lösen lässt. Das ng-click ruft nicht isTimeValid() ab, sondern checkTimeValidity(). Und diese neu zu schreibende Funktion befragt ihrerseits isTimeVaid() und setzt dann aus deren Ergebnis die entsprechenen Werte im $scope. Damit kann dann isTimeValid() eine einfache lokale Funktion werden, die nicht an $scope hängen muss (falls es nicht noch andere Gründe gibt).
dedlfix.
Hi,
zusätzlich zum bereits gesagten:
/^(\d{2})\:(\d{2})$/
Die Klammern brauchst Du auch nicht, denn Du greifst nicht per back-reference darauf zu.
Und der Doppelpunkt muß auch nicht escaped werden.
/^\d{2}:\d{2}$/
reicht also aus. Und ist schneller, da die back-references nicht ermittelt werden müssen.
cu,
Andreas a/k/a MudGuard