簡體   English   中英

正則表達式為子字符串然后比較

[英]Regex to substring then compare

我的mvc應用程序中包含以下代碼:

[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。 它必須等於數字的最后四位數。 我需要在此代碼塊中進行驗證。

有人可以幫我嗎? 提前致謝!

第一件事是,如果LastFourPAN的后四位數字相同,那么為什么需要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;
    }
}

用法,

[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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM