Лучшее подтверждение возраста, которое я когда-либо придумал, основано на регулярном выражении.
В приведенном ниже логе c указаны все возрасты, связанные с точкой останова.
// regex for validation of date format : dd.mm.yyyy, dd/mm/yyyy, dd-mm-yyyy
RegExp regExp = new RegExp(
r"^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$",
caseSensitive: true,
multiLine: false,
);
//method to calculate age on Today (in years)
int ageCalculate(String input){
if(regExp.hasMatch(input)){
DateTime _dateTime = DateTime(
int.parse(input.substring(6)),
int.parse(input.substring(3, 5)),
int.parse(input.substring(0, 2)),
);
return DateTime.fromMillisecondsSinceEpoch(
DateTime.now().difference(_dateTime).inMilliseconds)
.year -
1970;
} else{
return -1;
}
}
void main() {
// input values and validations examples
var input = "29.02.2008";
print("12.13.2029 : " + regExp.hasMatch("12.13.2029").toString());
print("29.02.2028 : " + regExp.hasMatch("29.02.2028").toString());
print("29.02.2029 : " + regExp.hasMatch("29.02.2029").toString());
print("11/12-2019 : " + regExp.hasMatch("11/12-2019").toString());
print("23/12/2029 : " + regExp.hasMatch("23/12/2029").toString());
print("23/12/2029 : " + regExp.hasMatch(input).toString());
print("sdssh : " + regExp.stringMatch("sdssh").toString());
print("age as per 29.02.2008 : " + ageCalculate(input).toString());
}
Выходные данные
12.13.2029 : false
29.02.2028 : true
29.02.2029 : false
11/12-2019 : false
23/12/2029 : true
23/12/2029 : true
sdssh : null
age as per 29.02.2008 : 12
Надеюсь, вы найдете это полезным. :)