Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC RegularExpressionAttribute。测试重复字符regexp无效_C#_Regex_Model View Controller_Validation - Fatal编程技术网

C# MVC RegularExpressionAttribute。测试重复字符regexp无效

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

我需要检查字段是否包含重复字符(超过三个)。我在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}$
完全相同

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

^.*([a-zA-Z])\1{2}*$
或者,如果要匹配重复字符之间存在其他字符的字符串,可以使用以下模式:

^.*([a-zA-Z])(.*\1){2}*$
编辑:

因为这个问题是关于
RegularExpressionAttribute
的正则表达式的,我在回答时忽略了这个事实,所以整个第一段都可以忽略。

谢谢你,你写的第一个表达式很有帮助
return match.Success;