First, you can pull up a found set of just the records with invalid dates so that you have a smaller set of records to work with and a simpler script.
In a scripted or manual find, you can put a lone ? in the date field and find all records where the value in that field is not valid.
Then you can use Replace Field Contents with a calculation like this to correct the invalid dates:
Let ( [ d = Leftwords ( YourTable::DateField ; 1 ) ;
m = Ceiling ( Position ( "JanFebMarAprMayJunJulAugSeptOctNovDec" ; Left ( MiddleWords ( YourTable::DateField ; 2 ; 1 ) ; 3 ) ;1 ;1 ) / 3 );
y = GetAsNumber ( RightWords ( YourTable::DateField ; 1 ) ) ];
Date ( m ; d ; If ( y > 12 ; 1900 ; 2000 ) + y )
Note that if this is a one time only batch fix that you need to do, you don't really need a script as you only have two steps to perform here and they can be done manually.
Note also that Replace Field Contents can change the values of 100's of records in one go and can't be undone. It's a good idea to save a back up copy of your database before trying out a "batch update" like this so that you can toss out the file and revert to your back up copy if you don't get the results you expect.
Brilliant, you are a lifesaver Phil. I forgot that a "-" dileniates a new word for the text functions. I really appreciate your help, as always.