Regulärer Ausdruck für Zeitangaben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regulärer Ausdruck für Zeitangaben

    Hallo,

    ich brauch einen regulären Ausdruck für eine Zeit/einen Interval. Der Benutzer soll 1359 eingeben, per regex möchte ich 13:59:00 erhalten. Gibt der Benutzer 135921 ein, wird folgerichtig 13:59:21 erkannt. Die Sekunden sind optional.

    Da es sich nicht um eine Uhrzeit handelt, kann der Stundenanteil 24 überschreiten: 11359 sollte 113:59:00 werden.

    Mein aktueller Ausdruck packt 11359 überhaupt nicht, 1135900 wird umgesetzt.

    Code:
    var matches=test.match(/^(-?)((\d{1,})([:]?)(\d{2}))([:]?)(\d{2}?)/);
    alert(matches);
    if(matches && matches[5] <60 && (''==matches[7] || matches[7] <60)){
        obj.value=matches[1]+matches[3]+':'+matches[5]+':'+(''==matches[7]?'00':matches[7]);
    }
    Hat jemand eine Idee oder einen kleinen Tipp für mich? Besten Dank schon mal im voraus.

  • #2
    Hallo,

    Zitat von Patrick_PQ Beitrag anzeigen
    Der Benutzer soll 1359 eingeben, per regex möchte ich 13:59:00 erhalten. Gibt der Benutzer 135921 ein, wird folgerichtig 13:59:21 erkannt. Die Sekunden sind optional.

    Da es sich nicht um eine Uhrzeit handelt, kann der Stundenanteil 24 überschreiten: 11359 sollte 113:59:00 werden
    Das ist ne ganz schlechte Idee, weil es nicht entscheidbar ist, ob 11359 jetzt 113:59:00 oder 1:13:59 ist. Daran ändert auch der raffinierteste RegEx nichts.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hi Amica,

      Danke für die schnelle Antwort.

      Das ein Ausdruck nicht erkennen kann was der User will ist mir schon klar, wie beschrieben sind die Sekunden optional, die Minuten werden zweistellig angegeben. Der Ausdruck sollte also folgendes leisten: 11359 = 113:59:00
      • 3 bis 5 stellige Eingabe = Stunden und Minuten
      • 6 und sieben stellige Eingabe = Stunden, Minuten und Sekunden


      Achja, das ganze kann natürlich auch mit einem - als negative Eingabe erfolgen.

      Ich möchte die User halt von den Sekunden befreien, da üblicherweise nur Minuten eingegeben werden.

      Kommentar


      • #4
        Und wie wird 1:13:59 angegeben?

        Edit: /^\s*(-?)(((\d{1,3}):?(\d{2}))|((\d{2,3}):?(\d{2}):?(\d{2})))\s*$/
        Das folgt jetzt streng deiner Regel:
        * 3 bis 5 stellige Eingabe = Stunden und Minuten
        * 6 und sieben stellige Eingabe = Stunden, Minuten und Sekunden

        Vorzeichen: matches[1]
        Stunden: matches[7] || matches[4]
        Minuten: matches[8] || matches[5]
        Sekunden: matches[9] || "00"
        Zuletzt geändert von AmicaNoctis; 16.09.2009, 17:44.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          gute Idee - habe nicht daran gedacht zwei Prüfungen mit Oder zu verbinden. Probiere ich gleich Mal aus - Besten Dank schon jetzt.

          Zu deiner Frage wie 1:13:59 eingetragen wird: genau so - mit Trennzeichen. Wie gesagt ist der Normalfall nur Stunden und Minuten, diese Standardeingabe soll schnell und komfortabel per Tastatur erfolgen können. Bei Ausnahmen ist halt ein Trennzeichen erforderlich - die kommen ja aber nicht so häufig vor.

          Kommentar

          Lädt...
          X