2016-05-23 24 views
0

"123a * a712"のようなシーケンスが有効です。 4桁目は有効ではないため、3桁の数字はNOT桁であることを保証したいと思います。シーケンス内で少なくとも4桁の非数字を見つける

いくつかの例:

"56 + 33" - 有効(空白も文字である)

"56 + 33 + 6" - (3つ以上の数字以外の文字)無効

"エラー" - 無効

"1234" - 有効

ありがとうございました!

+1

で達成することができますが、これまでに試した/やっている私たちを表示します。これは「他の誰かがあなたの仕事をしてもらう」サービスではありません。 – CSharpie

+0

この正規表現を使用してください。「(0-9)* \ D \ D \ D [0-9] +))*」「 – rashfmnb

+0

をコンパイルする」@CSharpie私がここに向かうことを決心したとき、それはすでにさまざまな変更の後であったので、その試みを投稿しなかったことを謝罪します。 – OmerM25

答えて

3

正規表現

bool IsValid = "123a*a712".Count(x => !char.IsDigit(x)) < 4; 
+0

これは、それを解決します、ありがとう! – OmerM25

0

ヘルパーを使用して使用する必要はありません。

public static class String 
{ 
    public static bool containsAtLeastXNonDigit(string s, int nbOfDigit) 
    { 
     return s.Count(!char.IsDigit) >= nbOfDigit; 
    } 
} 

し、それを使用します。String.containsAtLeastXNonDigit("ToTest", 4);

3

あなたは絶対に正規表現ソリューションを必要とする場合は、

で行くことができるが、
^(\d*[^\d]?){0,3}\d*$ 

数字は3桁まで一致します。

See it here at regex101

+0

私は個人的には@fuboが投稿したLINQアプローチを好んでいます。 – OmerM25

1

数字が ではない3文字しか使用しないようにしたいと思っています。これは、4+が無効になるためです。ただ実現

public static int countNonDigit(string str) { 
    return (str.Length - str.Count(char.isDigit)) 
} 

if (countNonDigit(str) >= 4) { 
    // not valid 
} 

EDIT

、同じことがstr.Count(!char.isDigit);

関連する問題