Вот еще вариант, проверяет номер написанный в любом формате со скобками вокруг кода и без с пробелами и с тире и с + в начале и без
var str = '90553334849';
alert(/^\+?9[ -]?\(?05[58]\)?[ -]?\d{3}[ -]?\d{2}[ -]?\d{2}$/.test(str));
UPD:
вот проверка (одной регуляркой в одну строку) по массиву кодов
var str = '9(055)3334849';
var allow = ['055','058'];
alert((new RegExp('^\\+?9[ -]?\\(?('+allow.join('|')+')\\)?[ -]?\\d{3}[ -]?\\d{2}[ -]?\\d{2}$')).test(str));
UPD3:
Почитайте:
https://developer.mozilla.org/en-US/docs/Web/JavaS...
в разделе "Special characters in regular expressions." расписаны все спецсимволы, которые используются в регулярных выражениях.
про конструктор new RegExp там тоже есть...
кокретно в последнем примере:
т.к. регулярку нам надо создавать "динамически", то используется конструктор new RegExp , который из строки создает и возвращает регулярку и уже у нее вызывается метод .test()
про строку - в строке спецсимволы \ необходимо экранировать (предварять) символом \
в строку регулярки мы вставляем все коды из массива allow склеенные через символ |
регулярка вида (одно|второе|третье) читается как одно ИЛИ второе ИЛИ третье
в данном случае массив склеивается и реглярка читается как 055 или 058
ну, как-то так... )