/// <summary> /// 是否全部是中文数字 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsAllChineseNum(string input) { if (string.IsNullOrWhiteSpace(input)) { return(false); } for (int i = 0; i < input.Length; i++) { if (i < input.Length - 1 && input[i] == '分' && input[i + 1] == '之') // e.g. 百分之六 { i += 1; continue; } if (!ALL_CHINESE_NUMs.Contains(input[i])) // 如果不是中文数字字符 { if (NUM_DELIMITER.Contains(input[i])) // 如果是数字分隔符 { // 分隔符前后必须是中文数字,否则返回false if (i == 0 && (!ALL_CHINESE_NUMs.Contains(input[i + 1])) || i == input.Length - 1 && (!ALL_CHINESE_NUMs.Contains(input[i - 1]))) { return(false); } } else if (i != 0 || !CHINEST_NUM_PREFIX.Contains(input[i])) { return(false); } } } return(true); }
/// <summary> /// 获取字符类型 /// </summary> /// <param name="str">单字符构成的字符串</param> /// <returns></returns> public static int CharType(string str) { if (string.IsNullOrWhiteSpace(str)) { return(CT_OTHER); // 各种类型的空白符号,类型均为 “其他” } if (ALL_CHINESE_NUMs.Contains(str)) { return(CT_NUM); // 全角阿拉伯数字和汉字数,类型为 “数字” } byte[] bytes; try { bytes = Encoding.GetEncoding("GBK").GetBytes(str); // 将字符串转为 “GBK”编码 } catch { bytes = Encoding.Unicode.GetBytes(str); // 转为 unicode 编码 } var b1 = bytes[0]; byte b2 = bytes.Length > 1 ? bytes[1] : (byte)0; if (b1 < 128) // ascii,单字节字符 { if (' ' == b1) { return(CT_OTHER); // 空白符号,类型为 “其他” } if ("*\"!,.?()[]{ }+=/\\;:|\n".Contains((char)b1)) { return(CT_DELIMITER); // “分隔符” 类型 } if ("0123456789".Contains((char)b1)) { return(CT_NUM); // 半角阿拉伯“数字”类型 } return(CT_SINGLE); // 所有剩余的单字节字符归类为 “单字节” 类型 } if (b1 == 162) { return(CT_INDEX); // 序号 } if (b1 == 163 && b2 > 175 && b2 < 186) { return(CT_NUM); // 全角数字字符 } if (b1 == 163 && (b2 >= 193 && b2 <= 218 || b2 >= 225 && b2 <= 250)) { return(CT_LETTER); // 全角英文字母大小写 } if (b1 == 161 || b1 == 163) { return(CT_DELIMITER); // 全角分隔符 A1, A3 } if (b1 >= 176 && b1 <= 247) { return(CT_CHINESE); // 中文字符 GBK: [B040, F7FE] , [F840, F8A0], } // Unicode: [7645, 9F44]+ [~] , [9CE3, 9D42] => [0E00, 9FA5] return(CT_OTHER); }