#!/usr/bin/env bash isDateInvalid() { DATE="${1}" # Autorized separator char ['space', '/', '.', '_', '-'] SEPAR="([ \/._-])?" # Date format day[01..31], month[01,03,05,07,08,10,12], year[1900..2099] DATE_1="((([123][0]|[012][1-9])|3[1])${SEPAR}(0[13578]|1[02])${SEPAR}(19|20)[0-9][0-9])" # Date format day[01..30], month[04,06,09,11], year[1900..2099] DATE_2="(([123][0]|[012][1-9])${SEPAR}(0[469]|11)${SEPAR}(19|20)[0-9][0-9])" # Date format day[01..28], month[02], year[1900..2099] DATE_3="(([12][0]|[01][1-9]|2[1-8])${SEPAR}02${SEPAR}(19|20)[0-9][0-9])" # Date format day[29], month[02], year[1904..2096] DATE_4="(29${SEPAR}02${SEPAR}(19|20(0[48]|[2468][048]|[13579][26])))" # Date 29.02.2000 DATE_5="(29${SEPAR}02${SEPAR}2000)" # Match the date in the Regex #if ! [[ "${DATE}" =~ ^(${DATE_1}|${DATE_2}|${DATE_3}|${DATE_4})$ ]] #then # echo -e "ERROR - '${DATE}' invalid!" #else # echo "${DATE} is valid" #fi if [[ "${DATE}" =~ ^(${DATE_1}|${DATE_2}|${DATE_3}|${DATE_4}|${DATE_5})$ ]] ; then return 1 else return 0 fi } echo if isDateInvalid "${1}" ; then echo "inavalid Date: ${1}" else echo "${1} is valid." fi echo exit 0