Option 1:
Verwenden Gruppen erfassen, die Werte zu brechen, dann überprüfen Sie die Werte innerhalb der einfangenden Gruppen, wenn sie ein gültiges Datum überein:
^([\w]{4})([\w]{2})([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{8})$
Dies wird wie etwas entsprechen: ABCDZY19991231
in die folgenden Gruppen:
(ABCD)(ZY)(1999)(12)(31)()
^ ^^ ^^^
| | | | | |
| | | | | group 5
| | | | group 4
| | | group 3
| | group 2
| group 1
group 0
In diesem Fall würden die Gruppen 2, 3 und 4 die Datumskomponenten bilden. Sie können diesen regulären Ausdruck mit einem der vielen Online-RegEx-Tester testen und validieren, z. B. regex101.com. 2
Option:
den oben beschriebenen Ansatz nehmen, aber mehr kreativ mit den Zahlen Einfanggruppen bekommen, um nur die gewünschten Datumsbereiche zu umfassen. Siehe Matching Numeric Ranges with a Regular Expression:
Beispiele aus der oben genannten Seite:
- 000..255:
^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
- 0 oder 000..255:
^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
- 0 oder 000..127:
^(0?[0-9]?[0-9]|1[01][0-9]|12[0-7])$
- 0.999:
^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$
Dieser Ansatz ist jedoch sehr schwierig zu warten und sollte nur verwendet werden, wenn Sie Option 1 nicht alleine verwenden können.
Sie sollten angeben, was Sie mit Ihrer Formatzeichenfolge meinen. Was sind X, R, C, Y, M, D und n? –
@Student Ich habe die Frage bearbeitet. – Sunny
Also, 'XXXXRC' sind alle Buchstaben? Oder nur '[A-Z]'? Und 'n' sind Ziffern,' \ d'? Was ist falsch daran, nur '\ p {L} {6} \ d {14}' zu haben? Das würde sogar Unicode-Zeichen unterstützen. –