There isn't a right or wrong answer for phone number validation because it based on what numbers you want to allow
do you include country code
do you include mobile phones
do you include the country code infront of the mobile phone number
will you allow other characters such as brackets etc
validating phone numbers is not a straight forward problem.  One of the basic checks is to make sure it's a certain length. Probably one of the hardest jobs is to work out exactly what your rules are for validation.
I think the best way to tackle this is use a javascript function and in that function you can do a number of checks
before I checked the validation of the number I would remove dashes and brackets and just concentrate on validating the number.
You could then validate the first part of the phone and check it's an international code. If it wasn't an international code then you could check it was a valid mobile
I would then use regular expression to check it was the a certain length
If the validation is to difficult you may want to make the users select a drop down for country/mobile
here is some javascript I created to validate uk mobile
javascript:void(0);
function checkUKTelephone(telephoneNumber) {
   /// <summary>
   /// validates a uk mobile phone number
   /// </summary>
   // Convert into a string and check that we were provided with something
   var telnum = telephoneNumber + " ";
   if (telnum.length == 1) {
       telNumberErrorNo = 1;
       return false
   }
   telnum.length = telnum.length - 1;
   // Remove spaces from the telephone number to help validation
   while (telnum.indexOf(" ") != -1) {
       telnum = telnum.slice(0, telnum.indexOf(" ")) + telnum.slice(telnum.indexOf(" ") + 1)
   }
   // Remove hyphens from the telephone number to help validation
   while (telnum.indexOf("-") != -1) {
       telnum = telnum.slice(0, telnum.indexOf("-")) + telnum.slice(telnum.indexOf("-") + 1)
   }
   // Remove hyphens from the telephone number to help validation
   while (telnum.indexOf(")") != -1) {
       telnum = telnum.slice(0, telnum.indexOf(")")) + telnum.slice(telnum.indexOf(")") + 1)
   }
   while (telnum.indexOf("(") != -1) {
       telnum = telnum.slice(0, telnum.indexOf("(")) + telnum.slice(telnum.indexOf("(") + 1)
   }
   while (telnum.indexOf("+") != -1) {
       telnum = telnum.slice(0, telnum.indexOf("+")) + telnum.slice(telnum.indexOf("+") + 1)
   }
   if (telnum.indexOf("44") == 0){
       telnum = telnum.replace("44", "0");
   }
   var exp = /(070|071|072|073|074|075|076|077|078|079)\d{7,8}$/;
   if (exp != null) {
       //if the regular expression is wrong I don't want to show the user, we can use F12 to debug
       try {
           if (exp.test(telnum) != true) {
               telNumberErrorNo = 5;
               return false;
           }
       }
       catch (err) { }
   }
   // Telephone number seems to be valid - return the stripped telehone number  
   return telnum;
}