Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }