开发者

ASP.NET MVC 2 - Multiple Regex on a property

开发者 https://www.devze.com 2023-02-07 00:20 出处:网络
I would like to know if a way exists in asp.net mvc 2, to have multiple regular expression on a proprety. For example :

I would like to know if a way exists in asp.net mvc 2, to have multiple regular expression on a proprety. For example :

[RegularExpression("[^0-9]", ErrorMessageResourceName = ValidationMessageResourceNames.OnlyDigits, ErrorMessageResourceType = typeof(ValidationMessages))]
[RegularExpression("[^<>]{2,}", ErrorMessageResourceName = ValidationMessageResourceNames.SpecialCharErrorCreateAccount, ErrorMessageResourceType =开发者_如何转开发 typeof(ValidationMessages))]
public string City { get; set; }

The target here, is two have two specific error messages, one for the digits and one other for the special Chars and the fact that the min lenght must be 2 chars.

Thanks in advance for the help, or experience.

Etienne.


Something like this:

    public class DigitsAttribute : RegularExpressionAttribute
    {
        public DigitsAttribute()
            : base("[^0-9]")
        {
        }    
    }

    public class SpecialCharsAttribute : RegularExpressionAttribute
    {
        public SpecialCharsAttribute()
            : base("[^<>]{2,}")
        {
        }
    }

Use:

[Digits]
[SpecialChars]
public string City { get; set; }


Change attribute usage with a custom class

The best solution is of course to create a custom attribute that inherits from RegularExpressionAttribute but sets different attribute usage settings. The main setting is AllowMultiple that you need to set to true.

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple=true)]
public class MultiRegularExpressionAttribute: RegularExpressionAttribute
{
    ...
}

You would use this attribute just like you use the existing RegularExpressionAttribute, but you'd have the ability to put multiple of them on the same property.


Try this,

[RegularExpression("[^0-9]|[^<>]{2,}", ErrorMessageResourceName = ValidationMessageResourceNames.OnlyDigits, ErrorMessageResourceType = typeof(ValidationMessages))]
public string City { get; set; }

Here '|' has been used as OR condition to match

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号