【问题标题】:ASP.NET MVC 2 - Multiple Regex on a propertyASP.NET MVC 2 - 属性上的多个正则表达式
【发布时间】:2011-01-26 10:23:21
【问题描述】:

我想知道 asp.net mvc 2 中是否存在在一个属性上具有多个正则表达式的方法。例如:

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

这里的目标是两个有两个特定的错误消息,一个用于数字,另一个用于特殊字符,并且最小长度必须为 2 个字符。

提前感谢您的帮助或经验。

艾蒂安。

【问题讨论】:

  • 我不确定我是否完全理解您的要求。字符串验证失败/通过的规则是什么?你能举一些你想匹配或不想匹配的字符串的例子吗?

标签: asp.net-mvc regex


【解决方案1】:

类似这样的:

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

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

用途:

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

【讨论】:

【解决方案2】:

使用自定义类更改属性用法

最好的解决方案当然是创建一个继承自RegularExpressionAttribute 的自定义属性,但设置不同的属性使用设置。主要设置为AllowMultiple,需要设置为true

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

您可以像使用现有的RegularExpressionAttribute 一样使用此属性,但您可以将多个属性放在同一个属性上。

【讨论】:

  • 你能展示一下这门课的具体内容吗?我真的很想使用这种方法,但我对此很陌生。新类中的 isValid 方法不知何故从未被访问,我不知道为什么。
  • 不要使用这个解决方案,看这个stackoverflow.com/questions/35652533/…
【解决方案3】:

试试这个,

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

这里'|'已被用作 OR 条件来匹配

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多