原本是群里某位大哥发的JavaScript版,因为项目里需要,改写成了C#版的,希望能对需要的人帮点忙哈~~~

 1        /// <summary>
 2        /// 将中文数字替换为阿拉伯数字
 3        /// </summary>
 4        /// <param name="word"></param>
 5        /// <returns></returns>

 6        public static string WordToNumber(string word)
 7        {
 8            string e = "([零一二三四五六七八九十百千万亿])+";
 9            MatchCollection mc = Regex.Matches(word, e);
10
11            foreach(Match m in mc)
12            {
13                word = word.Replace(m.Value, Word2Number(m.Value));
14            }

15            return word;
16        }

17
18        private static string Word2Number(string w)
19        {
20            if(w == "")
21                return w;
22
23            string e = "零一二三四五六七八九";
24            string[] ew = new string[]{""""""};
25            string ewJoin = "十百千";
26            string[] ej = new string[]{"""亿"};
27
28            string rss = "^([" + e + ewJoin + "]+" + ej[1+ ")?([" + e
29                + ewJoin + "]+" +ej[0+ ")?([" + e + ewJoin + "]+)?$";
30            string[] mcollect = Regex.Split(w, rss);
31            if(mcollect.Length < 4)
32                return w;
33            return (
34                Convert.ToInt64(foh(mcollect[1])) * 100000000 +
35                Convert.ToInt64(foh(mcollect[2])) * 10000 +
36                Convert.ToInt64(foh(mcollect[3]))
37                ).ToString();
38        }

39
40        private static int foh(string str)
41        {
42            string e = "零一二三四五六七八九";
43            string[] ew = new string[]{""""""};
44            string[] ej = new string[]{"""亿"};
45
46            int a = 0;
47            if(str.IndexOf(ew[0]) == 0)
48                a = 10;
49            str = Regex.Replace(str, e[0].ToString(), "");
50
51            if(Regex.IsMatch(str, "([" + e + "])$"))
52            {
53                a += e.IndexOf(Regex.Match(str, "([" + e + "])$").Value[0]);
54            }

55
56            if(Regex.IsMatch(str, "([" + e + "])" + ew[0]))
57            {
58                a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[0]).Value[0]) * 10;
59            }

60
61            if(Regex.IsMatch(str, "([" + e + "])" + ew[1]))
62            {
63                a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[1]).Value[0]) * 100;
64            }

65
66            if(Regex.IsMatch(str, "([" + e + "])" + ew[2]))
67            {
68                a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[2]).Value[0]) * 1000;
69            }

70            return a;
71        }
 posted on 2007-09-20 20:50  *Alacky  阅读(5276)  评论(4编辑  收藏  举报