Одним из лучших методов, которые я бы предложил для решения этой проблемы, было бы использование атрибута Remote, который позволит вам проверить свое значение по определенному методу для определения достоверности:
Удалить атрибуты проверки
[Remote("IsPhoneOrEmail", "YourController", ErrorMessage = "Not a valid phone or e-mail!")]
public string Notification { get; set;}
, который вызывает определенный метод для проверки:
public ActionResult IsPhoneOrEmail(string notification)
{
Regex phoneRegex = new Regex(@"^([0-9\(\)\/\+ \-]*)$");
Regex emailRegex = new Regex("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
return (emailRegex .IsMatch(notification) || phoneRegex.IsMatch(notification));
}