public bool Check(T value)
        {
            string pattern = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";
            bool   sucesso = false;

            if (ValidationMessage.Equals("Só é permitido e-mail corporativo."))
            {
                ValidationMessage = _ValidationMessage;
            }

            if (value != null)
            {
                string val = value as string;
                if (!string.IsNullOrEmpty(val))
                {
                    var regex = new Regex(pattern, RegexOptions.IgnoreCase);
                    sucesso = regex.IsMatch(val);
                    if (sucesso && BlackDomains?.Count > 0)
                    {
                        foreach (string blackDomain in BlackDomains)
                        {
                            if (val.Contains(blackDomain))
                            {
                                sucesso = false;
                                if (!ValidationMessage.Equals("Só é permitido e-mail corporativo."))
                                {
                                    _ValidationMessage = ValidationMessage;
                                }

                                ValidationMessage = "Só é permitido e-mail corporativo.";
                            }
                        }
                    }
                }
            }

            return(sucesso);
        }
        public void TestValidationMessage()
        {
            string messageKey     = "message 1";
            string defaultMessage = "Validation error message: {0}, {1}.";
            IEnumerable <object> messageArguments = new object[] { 5, 10 };
            IValidatable         validationSource = new Example();
            string          propertyName          = "FullName";
            ValidationLevel validationLevel       = ValidationLevel.Info;
            string          validationContext     = ValidationContext.Default;
            int             validationPriority    = 6;

            var message1 = new ValidationMessage(messageKey, defaultMessage, messageArguments, validationSource, propertyName, validationLevel, validationContext, validationPriority);
            var message2 = new ValidationMessage(messageKey, defaultMessage, messageArguments, validationSource, propertyName, validationLevel, validationContext, validationPriority);

            Assert.AreEqual("Validation error message: 5, 10.", message1.Message);
            Assert.AreEqual(propertyName, message1.PropertyName);
            Assert.AreEqual(validationContext, message1.ValidationContext);
            Assert.AreEqual(validationLevel, message1.ValidationLevel);
            Assert.AreEqual(validationPriority, message1.ValidationPriority);
            Assert.AreEqual(validationSource, message1.ValidationSource);
            Assert.AreEqual("Example.FullName (message: \"Validation error message: 5, 10.\", level: Info, context: default, priority: 6)", message1.ToString());

            Assert.AreEqual(message1.Message, message2.Message);
            Assert.AreEqual(message1.PropertyName, message2.PropertyName);
            Assert.AreEqual(message1.ValidationContext, message2.ValidationContext);
            Assert.AreEqual(message1.ValidationLevel, message2.ValidationLevel);
            Assert.AreEqual(message1.ValidationPriority, message2.ValidationPriority);
            Assert.AreEqual(message1.ValidationSource, message2.ValidationSource);

            Assert.AreEqual(true, message1 == message2);
            Assert.AreEqual(true, message1 == message1);
            Assert.AreEqual(0, message1.CompareTo(message2));
            Assert.AreEqual(true, message1.Equals(message2));
            Assert.AreEqual(true, message1.Equals(message2 as object));
            Assert.IsTrue(message1.GetHashCode() > 0);

            ValidationMessage.GetLocalizedMessage = x => "Napaka pri validaciji: {0}, {1}.";

            var message3 = new ValidationMessage(messageKey, defaultMessage, messageArguments, validationSource, propertyName, validationLevel, validationContext, 8);

            Assert.AreEqual("Napaka pri validaciji: 5, 10.", message3.Message);
            Assert.AreEqual(propertyName, message3.PropertyName);
            Assert.AreEqual(validationContext, message3.ValidationContext);
            Assert.AreEqual(validationLevel, message3.ValidationLevel);
            Assert.AreEqual(8, message3.ValidationPriority);
            Assert.AreEqual(validationSource, message3.ValidationSource);

            Assert.AreEqual(true, message1 != message3);
            Assert.AreEqual(-1, message1.CompareTo(message3));
            Assert.AreEqual(false, message1.Equals(message3));
            Assert.AreEqual(false, message1.Equals(message3 as object));
            Assert.AreEqual(false, message1.Equals(null));
            Assert.AreEqual(false, message1.Equals(null as object));
            Assert.AreEqual(false, message1 == null);
            Assert.AreEqual(false, null == message1);

            ValidationMessage.GetLocalizedMessage = x => "Napaka pri validaciji: {5}.";

            var message4 = new ValidationMessage(messageKey, "Test {0}", messageArguments, validationSource, propertyName, validationLevel, "new item", 8);

            Assert.AreEqual("Napaka pri validaciji: {5}.", message4.Message);
            Assert.IsTrue(message4.GetHashCode() != 0);

            ValidationMessage.GetLocalizedMessage = null;
        }