C# MVC RegularExpressionAttribute。测试重复字符regexp无效
我需要检查字段是否包含重复字符(超过三个)。我在RegularExpressionAttribute中使用正则表达式,但它不起作用。 比如说,C# MVC RegularExpressionAttribute。测试重复字符regexp无效,c#,regex,model-view-controller,validation,C#,Regex,Model View Controller,Validation,我需要检查字段是否包含重复字符(超过三个)。我在RegularExpressionAttribute中使用正则表达式,但它不起作用。 比如说, 图案:([a-zA-Z])\1{2} 输入:abcdddf 结果:没有对手 “源代码”属性中包含以下代码: public override bool IsValid(object value) { this.SetupRegex(); string str = Convert.ToString(value, CultureInfo.C
- 图案:([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}$
完全相同
方法是您应该使用的方法。或者,您也可以这样更改正则表达式:
^.*([a-zA-Z])\1{2}*$
或者,如果要匹配重复字符之间存在其他字符的字符串,可以使用以下模式:
^.*([a-zA-Z])(.*\1){2}*$
编辑:因为这个问题是关于
RegularExpressionAttribute
的正则表达式的,我在回答时忽略了这个事实,所以整个第一段都可以忽略。谢谢你,你写的第一个表达式很有帮助
return match.Success;