2011-11-15 355 views
21

我有以下的正則表達式^[a-zA-Z0-9]+$這將允許字母數字字符。這裏的問題是,如果我只輸入像「897687」這樣的數字字符,那麼正則表達式仍然匹配。我不希望這種情況發生。應該至少有一個文本字符,它應該以文本字符開頭。例如像「a343」或「a98bder」或「a4544fgf343」C#正則表達式只允許字母數字

如果你能幫我改進我的正則表達式,這將是非常好的。

+2

順便說一句,以「應該有至少一個字母,它應該有一個字母開始」,後者意味着前者將永遠是正確的。所以_requirement_是「它應該以字母開頭」。現在去Rowvote,因爲他對此非常瞭解:-) – paxdiablo

回答

33

聽起來像是你想:

^[a-zA-Z][a-zA-Z0-9]*$ 
4
^[a-zA-Z][a-zA-Z0-9]*$ 

應該做的伎倆!

或者,如果您希望包括所有字母數字加下劃線,你可以使用:

^[a-zA-Z][\w]*$ 
+0

Whitespace絕對不包含在'\ w'中。在.net中它是'[\ p {L} \ p {N} _]'它包含所有Unicode字母,數字和(至少)下劃線。 – stema

+0

@stema對不起,我的頭說下劃線,但我的手指輸入空格。很好,謝謝。 –

11

以防萬一的ASCII字符是在某些時候還不夠,這裏的Unicode版本:

^\p{L}[\p{L}\p{N}]*$ 

\p{L}是具有屬性信==>從任何語言的任何字母(即以Unicode)

任何Unicode代碼點是任何具有屬性編號的Unicode代碼點==>任何語言的任何數字字符(即Unicode)

2

此函數將基於正則表達式是否匹配返回true或false,

public static Boolean isAlphaNumeric(string strToCheck) 
    { 
     Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$"); 
     return rg.IsMatch(strToCheck); 
    } 
1

或略超過公認的答案更簡潔:

^[a-zA-Z][\w]*$ 

C#正則表達式有字符類指標「\ W」字母數字字符,但不具有隻是字母(沒有數字)字符類,因此你必須指定類手動設置[a-zA-Z]。

+1

如前所述,[\ w]包含原始帖子中未被要求的下劃線字符,並不等同於接受的答案。 https://msdn.microsoft.com/en-us/library/vstudio/20bw873z(v=vs.110).aspx#WordCharacter – fractor

0

這是檢查字母的最佳解決方案,

  • 如果只是字符串 - 「錯誤」。
  • 如果它只是整數 - 「錯誤」。
  • 如果它是字母數字 - 「成功」。

    if (System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[a-zA-Z]") && 
        System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[0-9]")  
    { 
        // Success - It is alphanumric 
    } 
    else 
    { 
        // Error - It is not alphanumric 
    } 
    
相關問題