MVC RegularExpressionAttribute.测试重复字符regexp不起作用

本文关键字:字符 regexp 不起作用 RegularExpressionAttribute 测试 MVC | 更新日期: 2023-09-27 18:23:48

我需要检查字段是否包含重复字符(超过三个)。我在RegularExpressionAttribute中使用了一个正则表达式,但它不起作用。例如,

  • 模式:([a-zA-Z])'' 1{2}
  • 输入:abcdddf
  • 结果:没有对手

在源代码属性中有以下代码:

public override bool IsValid(object value)
{
    this.SetupRegex();
    string str = Convert.ToString(value, CultureInfo.CurrentCulture);
    if (string.IsNullOrEmpty(str))
    {
        return true;
    }
    Match match = this.Regex.Match(str);
    return ((match.Success && (match.Index == 0)) && (match.Length == str.Length));
} 

如果不是字符串

return ((match.Success && (match.Index == 0)) && (match.Length == str.Length));

只是

return match.Success;

那么问题就会得到解决。有没有办法在不实现自定义RegularExpressionAttribute的情况下绕过这个限制?对其他人来说,它本身可能是一个正则表达式吗?

MVC RegularExpressionAttribute.测试重复字符regexp不起作用

您可以在正则表达式中使用正向前瞻:

(?=.*([a-zA-Z])'1{2}).*

上面的正则表达式匹配整个字符串(.*),但前提是字符串((?=.*([a-zA-Z]))中有重复字符。

问题是,只有当整个字符串由三个完全相同的字符组成时,才返回true。由于您的额外检查,验证的行为与^([a-zA-Z])'1{2}$完全相同。

return match.Success;

方法是您应该使用的方法
或者,您也可以这样更改正则表达式:

^.*([a-zA-Z])'1{2}.*$

或者,如果你想匹配一个字符串,其中重复的字符之间有其他字符,你可以使用以下模式:

^.*([a-zA-Z])(.*'1){2}.*$

编辑:
由于这个问题是关于RegularExpressionAttribute的正则表达式的,我在回答时有点忽略了这一事实,所以可以忽略整个第一段。