2011-12-21 16 views
0

私は、文字列が数字かアルファベットであるか単純文字列ではないかを判断する必要があるサンプルデータを持っています。 EX用 :文字列が数字のみで、文字列ではないことを確認する方法?

my data is: 
123XY 
12346 
WEPXY 

最初の2つ(英数字と数値)がtrueを返すと、純粋な文字列についてfalseを返す条件は何ですか?

+0

あまりにも曖昧、 "1E3" は数値です。 –

+0

@ HansPassantのいずれの場合も、結果は一致します。あなたの解釈に応じて、*両方*数値と英数字です。 – Amy

+0

https://msdn.microsoft.com/en-us/library/bb384043.aspx – sachin

答えて

3

のような正規表現を使用します

([0-9]+[a-zA-Z]+)|([0-9]+) 

編集: まあ、あらゆる種類の問題を持っていた...私は、それ自体で正規表現でこれを把握、しかしすることができたことができませんでした

private bool HasLettersAndNumbersOnly(string value) 
{ 
    return !(Regex.IsMatch(value, @"^[a-zA-Z]+$") || Regex.IsMatch(value, @"[^a-zA-Z0-9]")); 
} 

テスト:うまく働いていた関数を作成

  • 123XY:真
  • 12346:真
  • XY123:真
  • X123Y:真
  • x2c3g:真
  • 2c3v4:真
  • 5C1 = +:偽
  • WEPXY:偽
  • +0

    括弧は必須ではありませんが、正規表現が何をしているかを理解するのに役立ちます... – Anders

    +0

    しかし、数字をたどるようにし、例えば 'XY123'とは一致しません。 – Guffa

    +0

    また、X123Yでは動作しません... – Anders

    0

    このような方法を使用する方法を使用する場合は、それは基本的にあなたがちょうどいい、文字列が数値の桁が含まれていることを確認する必要があります真または偽

    public static bool IsOnlyNumbers(string strValidateString, bool boolCheck4LetterOrDigit) 
    { 
        bool boolValidatePassed = false; 
        switch (boolCheck4LetterOrDigit) 
        { 
         case true: 
         { 
          if (strValidateString.All(Char.IsDigit)) 
          { 
           boolValidatePassed = true; 
          } 
          break; 
         } 
         case false: 
         { 
          if (strValidateString.All(Char.IsLetter)) 
          { 
           boolValidatePassed = false; 
          } 
          break; 
         } 
        } 
        return boolValidatePassed; 
    } 
    
    +0

    これは 'WEPXY'でもtrueを返します。 – Guffa

    +0

    おっと私はすぐに編集することができると書いています。彼は例を変えて、とにかく彼が望むとは思っていましたが、基本的に彼がCharを使うならば、彼が必要とするすべてを見つけることができ、ループのために代理人lambda、linqを作成することができます。検証するかチェックするかによって、 – MethodMan

    0
    Regex r = new Regex(@"\d"); 
    string[] testData = new string[] { "123XY", "12346", "WEPXY" }; 
    foreach (var s in testData) 
    { 
        bool isMatch = r.IsMatch(s); 
        Console.WriteLine("Data: {0}, Is match: {1}", s, isMatch); 
    } 
    Console.ReadLine(); 
    

    を返す必要がありdは?正規表現 '\ d'は任意の数字に一致します。

    上記のコードが出力します:

    データ:123XY、試合です:真の
    データ:12346は、試合です:真の
    データ:WEPXYは、試合です:偽

    1

    AZ、az、および0-9のみを許可する正規表現を使用し、肯定先読みを使用して少なくとも1桁の数字を必要とする正規表現を使用できます。

    bool isValid = Regex.IsMatch(input, @"^(?=.*\d)[A-Za-z\d]+$"); 
    

    テスト:

    "123XY" : true 
    "12346" : true 
    "WEPXY" : false 
    "1abcd" : true 
    "abcd1" : true 
    "ab2cd" : true 
    "1abc2" : true 
    "1"  : true 
    "a"  : false 
    "1a" : true 
    "a1" : true 
    ""  : false 
    
    +1

    数字だけを探すのはなぜですか?正規表現\ dははるかに単純であり、提供されたテストデータに対して正しい結果を達成します。 – Amy

    +1

    @Inuyasha:それは "文字列が数字かアルファベットかを判断する"というタスクを達成しません。 '' 12-34 ''のような文字列は偽陽性を与えます。 – Guffa

    +0

    テスト文字列「12-34」がテストデータに提供されませんでした。条件は単純な文字列ではなく、数値を含むという条件でした。私たちのソリューションは、提供されるデータに適合する必要があります。私たちが夢見るデータではありません。完全に "12-34"はテストのために出てこないでしょう。 – Amy

    関連する問題