Все валидаторы ASP.NET должны быть частью страницы, чтобы функционировать.Вы заметите, что метод Validate не возвращает значение;это потому, что он не предназначен для использования так, как вы его используете.
Внутри метода Validate он пытается найти элемент управления по его идентификатору, и без родительского контейнера именования он не может это сделать.То, как вы это делаете, не имеет значения для проверки (потому что он не сможет найти элемент управления).
Я бы сделал одно из следующего:
1) Поместите валидатор в ASPX, затем используйте его метод Validate и впоследствии проверьте свойство IsValid.Просто установите для параметра Дисплей значение Нет, и оно не должно отображаться в вашем пользовательском интерфейсе.
2) Просто запустите регулярное выражение вручную.Вы пишете здесь намного больше кода, чем было бы необходимо, если бы вы просто использовали Regex.IsMatch.
(Обратите внимание, что если вы используете Reflector, перейдите к RegularExpressionValidator, вы увидите, где он будет пытаться вызватьto this.NamingContainer среди прочего, который будет нулевым, не будучи частью коллекции элементов управления)