2012-01-31 52 views
4

也許我錯過了一些明顯的東西,但有沒有一種更簡單的方法來檢查一個字符是否是一個基本的拉丁字母(az),而不是轉換爲字符串,並使用正則表達式?:例如:最簡單的方法來檢查基本的拉丁字母(AZ)

public static bool IsBasicLetter(Char c) { 
    return Regex.IsMatch(c.ToString(), "[a-z]", RegexOptions.IgnoreCase); 
} 

Char.IsLetter匹配來自許多字母表的數百個字母字符。我可以直接檢查的代碼點,但感覺粗略:

public static bool IsBasicLetter(Char c) { 
    int cInt = c; 
    return !(cInt < 65 || cInt > 122 || (cInt > 90 & cInt < 97)); 
} 

回答

13

你的代碼的第二位看起來好多了,如果你使用的字符文字:

public static bool IsBasicLetter(char c) { 
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); 
} 
+0

這讓我感到驚訝。我會認爲A <∈ 2012-01-31 16:21:08

+0

@jmh_gr:字符只是UTF-16代碼單元,ASCII部分中的非重音字符(即小於U + 0080)。 – 2012-01-31 16:22:41

2

這個怎麼樣?

return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'); 
+0

請注意,它意味着不區分大小寫。 – 2012-01-31 16:12:56

+0

發帖後我注意到了,謝謝:) – Botz3000 2012-01-31 16:16:04

2

如果你想使它成爲一個比較複雜一點像AZ的子集,和其他幾個字符(即檢查有效的Base64字符)考慮使用布爾標誌數組的127個或255個字符與true爲您想要在您的IsBasicLetter方法中允許使用的字符。這是大多數庫實際實現這種類型的功能的方式。

對於更多的Unicode友好的方法來檢查字符(顯然在問題範圍之外),請檢查Char類的方法,如IsLetterOrDigit,它檢查所有可能的字母變體。

相關問題