There is no such thing as a regex to validate a phone number… Really, forget it. :-)
There are dozens of formats across the world, and sometimes within countries themselves. This means you've no guarantee whatsoever on the number of digits — which, btw, it can be as few as two, and perhaps even one, digits.
Adding insult to injury, each place seems to have its own way to present phone numbers: with local code and regional codes or without, with a slew of parenthesis, brackets, dashes, dots, spaces, letters, even words; you name it. In some countries, the locals can't even agree on how it's supposed to be formatted amongst themselves for the same number.
In the end, you might fix your regex by adding stuff in your brackets, e.g. [\d \-\)\(\+\.a-zA-Z]
. But in the end it'll still be just as wrong as requiring a non-empty zip code, due to length considerations or some edge case involving bizarre characters that you've yet to identify.
The only way to truly be sure is to dial the number and actually place the call.