=~ succeeds if the string on the left contains a match for the regex on the right. If you want to know if the string matches the regex, you need to “anchor” the regex on both sides, like this:
regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
# Do awesome stuff here
fi
The ^ only succeeds at the beginning of the string, and the $ only succeeds at the end.
Notes:
- I removed the unnecessary
()from the regex and""from the[[ ... ]]. - The bash manual is poorly worded, since it says that
=~succeeds if the string matches.