Since the format is different for each country, you'd need to have rules somewhere for every country you wish to support.
Also, the examples you mention show a further complication: The "+" sign is generally used to mean that a country code follows - but that's only the case with the first number, not the second. You also need to account for the fact that numbers can differ depending on whether they are intended to be called from within a country, or from outside of a country.
You can probably search and find regular expressions which other people have used in the past for phone numbers. But as Ulf says, it is country-specific, and in Britain region-specific. London phone numbers have a different format from Manchester phone numbers which have a different format from Leeds phone numbers and they have a different format from Cambridge phone numbers and companies tend to have a different format etc etc
See how the codes are not overlapping. eg. if Egypt is +20, there's no country with +20x
So you could put these codes in a map (code -> country), then check the first digit. If that matches a code, then that's the country. If it does not, take the second digit to get a two digit code and see if that's in the map. I don't think that's most elegant, but maybe better than getting a list of regular expressions if all you're trying to do is detect country.
You showed up just in time for the waffles! And this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop