Ваши регулярные выражения отличаются первой соответствующей цифрой. Поместите 5
и 6
в один символьный класс (и удалите {1}
избыточные квантификаторы с группами - здесь вам не нужны группы захвата для проверки):
[RegularExpression(@"^\(?[65]\)?[-. ]?[0-9]{2}[-. ]?[0-9]{3}[-. ]?[0-9]{4}$")]
Обратите внимание, что RegularExpressionAttribute
regex должно соответствовать всей входной строке , так что вы можете фактически пропустить якоря ^
и $
:
[RegularExpression(@"\(?[65]\)?[-. ]?[0-9]{2}[-. ]?[0-9]{3}[-. ]?[0-9]{4}")]
График регулярных выражений :

См. Демоверсию regex .
Если вы хотите избежать совпадения значений с несовпадающими скобками в начале, измените шаблон на
^(?:\([65]\)|[65])[-. ]?[0-9]{2}[-. ]?[0-9]{3}[-. ]?[0-9]{4}$
См. это демо регулярных выражений .