Devo controllare che un campo in un form sia nel formato data gg/mm/aaaa per cui come pattern ho utilizzato questo:

$pattern = "(^(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)\d\d$)";


Ho alcuni dubbi che pur cercando non ho fugato:

1) i caratteri ^ e $ per indicare inizio e fine hanno senso, si devono utilizzare, di preciso cosa fanno?
2) io ho messo delle parentesi tonde ad inizio e fine ma ho visto mettere anche / oppure % è corretto?
3) per quanto riguarda il separatore / l'ho messo tra parentesi quadre. E' giusto oppure è più corretto senza e con un escape \/ oppure con parentesi quadre ed escape [\/]?

Grazie
ciao