g | x | w | all
Bytes Lang Time Link
040regex240916T003948Zguest430

regex, 40 bytes

^(\d*)[:|,.](\d*)[:|,.](\d*)[:|,.](\d*)$
try it online!

or if you'll allow all the delimers to be exactly the same, this is even better:

regex, 34 bytes

^(\d*)([:|,.])(\d*)\2(\d*)\2(\d*)$
try it online!

lessons that can be learned:
in general, regex tends to be simpler than you think it is. often, if you're thinking of including a non-capturing group, it's easier to just get rid of the group altogether; non-capturing groups don't increase the 'power' of a regex at all (ie, there is no pattern a non-capturing group lets you capture that you couldn't have already matched without it).
also, you should only use | alternation for exact strings; [] character classes are much easier to use for individual characters. additionally, alternation can be very slow in terms of big-O if you have * or + counts on the individual elements.
finally, if you're using ? for a group, rethink about why you want that group in the first place. it's often easier to read a regex with less groups where each element has its count directly following it and allowing groups to match without a specified count.