Regex für ISO 8601-Dauern
Ich benötige einen regulären Ausdruck, um die Dauer im @ zu überprüfe ISO 8601 Dauerformat (mit Ausnahme von Bruchteilen, die ich nicht brauche).
PnYnMnDTnHnMnS
PnW
Hier ist was ich habe:
^P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$
as einzige Problem ist, dass die ZeichenfolgenP
undPT
sind mit diesem regulären Ausdruck zulässig, da alle Teile "null oder eins" sind?
.
T
dann muss es eine Zeitkomponente geben (H, M oder S)Wenn da ein ... istT
dann kann es Datumskomponenten geben oder nicht (Y, M oder D)in Überlauf ist zulässig (z. B.P72H
entspricht größtenteilsP3D
)Akzeptable Eingaben:
P1Y // date component only
P2MT30M // date and time components
PT6H // time component only
P5W // another date component
Unakzeptable Eingaben:
P // no components
PT // no components
P3MT // T specified but not time components
Im Moment bestehen die ungültigen Zeichenfolgen die clientseitige Überprüfung, schlagen jedoch serverseitig fehl, da sie an @ übergeben werdeDateInteval
aber ich würde gerne auf der Client-Seite scheitern, wenn möglich. Wenn jeder Chrome 40+ verwenden würde, könnte ich @ angebeminlength='3'
auf dem Eingabeelement zu helfen, aber das ist leider nicht der Fall.