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的情况下绕过这个限制?对其他人来说,它本身可能是一个正则表达式吗?
您可以在正则表达式中使用正向前瞻:
(?=.*([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
的正则表达式的,我在回答时有点忽略了这一事实,所以可以忽略整个第一段。