Ответ - хранить в коде, так как не нужно каждый раз лезть в 2 места если логика меняется, не размазывается поведение на 2 аппликации, и все легко отслеживается в вершн контроле
str.replace(/[\s\n\t]/mg, "").replace(/,/mg, ".")
var str = '9(055)3334849';
var allow = ['055','058'];
alert((new RegExp('^\\+?9[ -]?\\(?('+allow.join('|')+')\\)?[ -]?\\d{3}[ -]?\\d{2}[ -]?\\d{2}$')).test(str));
текущий проект, который поддерживаю, он правда древний, Oracle (полностью все в хранимках. включая вывод XML на клиента) + тонкий клиент на C#
на сколько мне известно софт Спортмастера, написанный тем же разработчиком, работает по аналогичной схеме и большинство их проектов.
так же крупнейшие депозитарии РФ, не буду называть (возможно ком. тайна :) ))
один Oracle (все операции в хранимках) + клиент Java (Spring+Hiberbate) + еще куча всего
другой MS SQL (все операции в хранимках) + клиент ... Delphi !! )))
и большинство банковского софта в хранимках. более того не в хранимках а в пакетах (это если Oracle, ну это условно можно считать классами ))) )
нормально все поддерживается, правда в случае с денежными операциями, без доступа к живым данным или среза, работать порой печально - трудно ))
потому как код практически неначем проверить.