也许我错过了一些明显的东西,但有没有更简单的方法来检查一个字符是否是一个基本的拉丁字母(a-z),而不是转换为字符串并使用正则表达式?:例如:
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));
}
答案 0 :(得分:14)
如果你使用字符文字,你的第二段代码看起来好多了:
public static bool IsBasicLetter(char c) {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
答案 1 :(得分:2)
这个怎么样?
return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z');
答案 2 :(得分:2)
如果您想让它更像AZ的子集和其他几个字符(即检查有效的Base64字符),请考虑使用true
的前127或255个字符的布尔标志数组您希望在IsBasicLetter方法中允许的字符。这是大多数库实际实现此类函数的方式。
对于更多Unicode友好的字符检查方法(明显超出问题范围),请查看Char类的方法,如IsLetterOrDigit,检查所有可能的字母变体。