I started out with the enum approach and greatly disliked it. Injection feels a lot more natural. 

As far as extension, I would highly doubt if anyone ever opted for anything other than regex, or a different strategy. In majority of all cases, nobody would bother providing the format/type. There would either be a pattern to ignore or not. However, for sake of completeness and ease of design, injection is the better approach.