We've got a date --#-- A date regex is tough, if you really want it to be bullet-proof. Let's start with a crude validator that doesn't do any more than assure we have 3 numbers separated by slashes.

if ($date =~ m%^\d{2}/\d{2}/\d{4}$%) { print "It's OK!\n"; }
Unfortunately, this thinks 99/99/0000 is a valid date, and 1/1/2000 isn't. OK, let's refine it by introducing limits on some of the digits.

if ($date =~ m%^[0-1]\d/[0-3]\d/19|20\d\d$%) { print "It's OK!\n"; }
Now we have code that rejects 20/41/3066, but that's not much use, because it also still rejects 1/1/2000 and thinks 19/39/1999 is OK, too. After noodling this for some hours, it becomes evident that months, anyway, come in two main variations: 1 to 9 (with or without a preceding zero), and 10 to 12. But the rules vary radically. The single digit months don't start at zero, but the double-digits go only up to 12. Day of month has a similar problem. Sooooo....

if ($date =~ m%^((0?[1-9])|(1[0-2]))/((0?[1-9])|([12][0-9])|(3[01]))/((19|20)\d\d)$/) { print "It's OK!\n"; }
This gets us closer. But we're still accepting dates like 2/29/1999 and 11/31/2001. Come to think of it, that 2/29 is going to be tough.