Why just stop at dashes and spaces?
s/\D//g
s/\D//g
Never "filter out the badness", always "filter for only the goodness" then use the good value. Exhaustively enumerating the goodness is easier than exhaustively enumerating the badness.
(I'd combine this with a check for length, too.)