2012-02-09 10 views
0

フィールドに重複文字(3つ以上)が含まれていることを確認する必要があります。私はRegularExpressionAttributeで正規表現を使用しますが、動作しません。 例えば、MVC RegularExpressionAttribute。繰り返し文字のテストregexpが機能しない

  • パターン:([-ZA-Z])\ 1 {2}
  • 入力:
  • abcdddf結果:いいえマッチ!代わりに、文字列の

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

    のみ

    return match.Success; 
    

    その後、問題が解決されるだろうしている場合

    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)); 
    } 
    

    :ソースコードの属性に

は、次のコードを持っています。 カスタムRegularExpressionAttributeを実装せずにこの制限を回避する方法はありますか?他の人たちへの正規表現ですか?

答えて

1

あなたの正規表現でpositive lookaheadを使用することができます。

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

上記の正規表現は、文字列全体(.*)に一致するが、重複した文字は、どこかの文字列((?=.*([a-zA-Z]))である場合にのみ。

+0

ага、точтонадо、спасибо! – user1199305

0

文字列全体がの場合、真になるのは、まったく同じ3文字からなる場合のみです。追加のチェックのため、検証は^([a-zA-Z])\1{2}$とまったく同じように動作します。

return match.Success; 

アプローチは、あなたが使うべきものです。
また、あなたはまた、このようなあなたの正規表現を変更することができます:

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

それとも、重複したものとの間に他の文字がある文字列を一致させたい場合、あなたはこのパターンを使用することができます。

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

編集:この質問はRegularExpressionAttributeの正規表現、私は一種のANSながら見過ごさ事実についてです
として最初の段落全体を無視することができます。

+0

ありがとうございます、あなたが書いた最初の表現が助けになりました – user1199305

関連する問題