Одно место, чтобы начать смотреть гну get_date lib , который может проанализировать примерно любой английская текстовая дата в метку времени. В то время как не точно, что Вы ищете, их решение подобной проблемы могло дать много полезных представлений.
Я не мог найти в Интернете много информации о DataType.PhoneNumber, но я нашел это:
http://forums.asp.net/p/1370546/2863383.aspx
В RTM-версии DataType.EmailAddress используется только для отметьте тип данных для себя use.
Я хотел узнать немного больше, поэтому я вытащил .NET Reflector от Red Gate и начал копаться.
Глядя на класс DataTypeAttribute, Джозеф Дейгл отлично подходит - каждый атрибут DataType не работает. сделать любую проверку; всегда возвращает истину (то есть «действителен»). Для некоторых типов данных выполняется пользовательское форматирование строки отображения. Телефонные номера, однако, практически не затрагиваются.
Итак, я рассмотрел возможные решения этой проблемы. Из того, что я нашел, этот выглядит лучше всего:
public class EvenNumberAttribute : ValidationAttribute
{
public EvenNumberAttribute() : base(() => Resource1.EvenNumberError) { }
public EvenNumberAttribute(string errorMessage) : base(() => errorMessage) { }
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
if (value == null)
{
return ValidationResult.Success;
}
int convertedValue;
try
{
convertedValue = Convert.ToInt32(value);
}
catch (FormatException)
{
return new ValidationResult(Resource1.ConversionError);
}
if (convertedValue % 2 == 0)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
}
}
Конечно, это проверяет, является ли число четным или нечетным. Вы можете написать собственный атрибут проверки для PhoneNumber, Email и т. Д., Который на самом деле выполняет проверку.
Атрибут DataTypeAttribute является атрибутом ValidationAttribute. Но он ВСЕГДА возвращает истину ... поэтому он не выполняет никакой реальной проверки.
(Я знаю, что это верно для 3.5, я не уверен, что это правда для 4.0)
Может это потому, что телефонные номера могут содержать буквы? wiki