То, что вы просите, не будет простым регулярным выражением, а также может быть решено без использования их.
function isPhoneNumberValid(number){
var parts, len = (
parts = /^\d[\d-]+\d$/g.test(number) && number.split('-'),
parts.length==3 && parts.join('').length
);
return (len>=10 && len<=12)
}
Конечно, это может быть немного медленнее, чем использование скомпилированного регулярного выражения, нонакладные расходы незначительны, если вы не собираетесь проверять сотни тысячных телефонных номеров таким образом.
Это не совсем идеально, но может соответствовать вашим потребностям, однако учтите, что это допускает две черты в любом месте, кроме началаи конец числа, так что это вернет true
для строки типа 111--123123
.