2013-06-18 3 views
1

У меня есть следующий код в моем приложении MVC:Regex для подстроки затем сравнить

[Required(ErrorMessageResourceName = "NumberRequired", ErrorMessageResourceType = typeof (Messages))] 
[RegularExpression("^[0-9]{16}$", ErrorMessageResourceName = "NumberRequired", ErrorMessageResourceType = typeof (Messages))] 
public string number{ get; set; } 

[Required(ErrorMessageResourceName = "LastFourRequired", ErrorMessageResourceType = typeof(Messages))] 
[RegularExpression("^[0-9]{4}$", ErrorMessageResourceName = "LastFourRequired", ErrorMessageResourceType = typeof(Messages))] 
public string lastfour{ get; set; } 

Моя проблема в том, что мне нужно проверить lastfour. Он должен быть равен последним четырем цифрам. Мне нужно сделать эту проверку в этом блоке кода.

Может кто-нибудь мне помочь? Заранее спасибо!

ответ

1

Прежде всего, если LastFour извлекает то же самое, что и последние четыре цифры PAN, зачем вам нужно LastFour. вы можете просто подстроить эту часть и получить последние четыре цифры.

Но если вам действительно нужно, чтобы сделать это, Вы можете создать пользовательский атрибут для этого

public class LastFourDigitsAttribute : ValidationAttribute, IClientValidatable 
{ 
    private string panPropertyname; 

    public LastFourDigitsAttribute(string pan) 
     : base() 
    { 
     if (string.IsNullOrEmpty(pan)) 
     { 
      throw new ArgumentNullException("pan"); 
     } 

     this.panPropertyname = pan; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     yield return new ModelClientValidationRule 
     { 
      ErrorMessage = ErrorMessage, 
      // This is the name of the method added to the jQuery validator method (must be lower case) 
      ValidationType = "lastfour" 
     }; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value != null) 
     { 
      PropertyInfo panPropertyInfo = validationContext.ObjectInstance.GetType().GetProperty(panPropertyname); 

      if (panPropertyInfo != null) 
      { 
       var panPropertyValue = panPropertyInfo.GetValue(validationContext.ObjectInstance, null); 

       if (panPropertyValue != null) 
       { 
        if (value.ToString() != panPropertyValue.ToString().Substring(panPropertyValue.ToString().Length - 4);) 
        { 
         return new ValidationResult(ErrorMessage); 
        } 
       } 
      } 
     } 

     return ValidationResult.Success; 
    } 
} 

Usage,

[LastFourDigits("PAN", ErrorMessageResourceName = "CustomerEnrollment_CardLastFourInvalidMessage", ErrorMessageResourceType = typeof(Messages))] 
[Required(ErrorMessageResourceName = "CustomerEnrollment_CardLastFourRequiredMessage", ErrorMessageResourceType = typeof(Messages))] 
[RegularExpression("^[0-9]{4}$", ErrorMessageResourceName = "CustomerEnrollment_InvalidLastFour", ErrorMessageResourceType = typeof(Messages))] 
public string LastFour { get; set; } 
+0

Отлично! Он отлично справился со мной. Спасибо за помощь! – Gerald

+0

Счастливое кодирование и надежду, что вы проголосуете, как только сможете! –

Смежные вопросы