| Title | Test
                    Find
                    
                    Pattern Title | 
            
                | Expression | ^(?:(?:(?:0?[1-9]|1\d|2[0-8])\/(?:0?[1-9]|1[0-2]))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:(?:(?:31\/0?[13578]|1[02])|(?:(?:29|30)\/(?:0?[1,3-9]|1[0-2])))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:29\/0?2\/(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26]))))$ | 
            
                | Description | This expression validates dates in the Brazilian d/m/y format from 1/1/1600 - 12/31/9999. The days are validated for the given month and year. Leap years are validated for all 4 digits years from 1600-9999. Days and months must be 1 or 2 digits and may have leading zeros. Years must be 4 digit years, between 1600 and 9999. Date separator must be a slash (/) | 
            
                | Matches | 29/02/2004 | 15/3/1824 | 31/01/2001 | 
            
                | Non-Matches | 29/02/2000 | 21/10/92 | 31/02/2001 | 
            
                | Author | Rating:
                        
Not yet rated.
                    Felipe Braga | 
            
                | Source |  | 
            
              | Your Rating |  | 
        
    
 
    
    
     
        
                
	                Title: Correction by Mario introduces bug + 29/02
	                Name: Mauro Sans
	                Date: 8/1/2007 11:14:01 AM
	                Comment: 
When you replaced 0?[13578]|1[02] with (0?[13578]|1?[02]), you introduced the possibility to enter 31/0/xxxx
After the "1" you shouldn't insert a ?.
And, the rules say that 29/02/1600, 2000, 2400, etc. should work. So I fixed it: 
^(?:(?:(?:0?[1-9]|1\d|2[0-8])\/(?:0?[1-9]|1[0-2]))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:(?:(?:31\/(?:0?[13578]|1[02]))|(?:(?:29|30)\/(?:0?[1,3-9]|1[0-2])))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:29\/0?2\/(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26]))|1600|2000|2400|2800))$
                
                
            
                
	                Title: problems with 31/10/yyyy and 31/12/yyyy 
	                Name: Mario Dias
	                Date: 10/26/2006 4:34:47 PM
	                Comment: 
I replaced 
0?[13578]|1[02]
with 
(0?[13578]|1?[02]).
It seems to work.
The complete expression should be :
^(?:(?:(?:0?[1-9]|1\d|2[0-8])\/(?:0?[1-9]|1[0-2]))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:(?:(?:31\/(0?[13578]|1?[02]))|(?:(?:29|30)\/(?:0?[1,3-9]|1[0-2])))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:29\/0?2\/(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26]))))$
                
                
            
                
	                Title: Problem with 31/12
	                Name: Pathik Thaker
	                Date: 9/27/2006 3:21:11 AM
	                Comment: 
It is not allowing 31st Dec with any year. Please check it.
                
                
            
                
	                Title: problem with 31/12/1999
	                Name: O. Crhonek
	                Date: 3/12/2004 9:56:56 AM
	                Comment: 
does not match for correct date 31/12/1999