dedlfix: JavaScript Check time

Beitrag lesen

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.