2011-12-21 37 views
0

我有一個示例數據在哪裏必須確定字符串是數字還是字母數字,但不是簡單的字符串。 爲前:如何檢查字符串是否只有數字和AlphaNumeric而不是字符串?

my data is: 
123XY 
12346 
WEPXY 

什麼是返回前兩個(字母和數字),真實和純粹的字符串返回false的條件?

+0

太曖昧, 「1E3」 是數字。 – 2011-12-21 19:34:51

+0

@HansPassant,無論哪種情況,結果都是匹配的。它是*數字和字母數字,取決於你的解釋。 – Amy 2011-12-21 19:38:17

+0

https://msdn.microsoft.com/en-us/library/bb384043.aspx – sachin 2016-09-16 10:46:06

回答

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 2011-12-21 19:32:50

    +0

    然而,這需要字母跟隨數字,並且不匹配例如'XY123'。 – Guffa 2011-12-21 19:35:54

    +0

    而且在X123Y上也不行 – Anders 2011-12-21 19:39:15

    0

    如果你想要一個方法來使用這樣的東西,你可以檢查任何一個d具有它返回true或false

    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 2011-12-21 19:38:11

    +0

    oops我寫了那個快速讓我編輯..他可以改變這個例子,並改變他的工作方式,但他基本上如果他利用了字符。方法,他可以找到他所需要的一切,並創建一個委託,lambda,linq,for循環等..取決於他想要驗證或檢查 – MethodMan 2011-12-21 20:21:44

    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'匹配任何數字。

    上面的代碼打印出:

    數據:123XY,爲符合:真
    數據:12346,爲符合:真
    數據:WEPXY,爲符合:假

    1

    您可以使用只允許AZ,az和0-9的正則表達式,並使用正向前向來要求至少一個數字:

    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 2011-12-21 19:48:37

    +1

    @Inuyasha:沒有完成「確定字符串是數字還是字母數字」的任務。像「12-34」這樣的字符串會給出誤報。 – Guffa 2011-12-21 19:54:53

    +0

    測試數據中未提供測試字符串「12-34」。條件是它不是一個簡單的字符串,並且包含一個數字。我們的解決方案需要適合所提供的數據,而不是我們想象的數據。完全有可能「12-34」不會出現在測試中。 – Amy 2011-12-21 19:55:57

    相關問題