For email addresses, I've found that it is a bad idea to go too complex with the pattern simply because the domain extensions are constantly changing - one day we may have a .zipper ... if you follow what I mean.
So, with that in mind, I would suggest that you just test for two things:
The @ symbol
A period: .
In the end, what you are trying to do is test that the user didn't accidentally make a mistake, so creating a second text box for email confirmation is the best approach. I say this, because if a user doesn't want to put in their real email address, there is nothing you can do about it.
I would think for phone numbers, much the same applies, as different regions of the world have different patterns ... to research all the patterns would be a pain and really in the end, it is of dubious advantage to test for them, just as it is for email addresses.
Sometimes in programming, tactical considerations are the wiser course ... rather than technical implementations.
I hope that makes sense.
Stefan