阿拉伯数字转中文大小写, 使用InternationalNumericFormatter和正规表示式Regular Expressions

来源:互联网 发布:无法连接这个网络 热点 编辑:程序博客网 时间:2024/05/17 01:42

之前有写过有关钱的系统,所以不免俗会跟银行一样有阿拉伯数字转中文大小写的需求,使用这篇文章分享一下如何使用正规表示式Regular Expressions来检查输入的金额,并使用EastAsiaNumericFormatter转换成中文大小写。

之前有写过有关钱的系统,所以不免俗会跟银行一样有阿拉伯数字转中文大小写的需求,使用这篇文章分享一下如何使用正规表示式Regular Expressions来检查输入的金额,并使用EastAsiaNumericFormatter转换成中文大小写。

首先正规表示式在微软的API中就可以直接拿来使用,不需要再额外下载第三方套件或API

using System.Text.RegularExpressions;

这个案例中我要判断的是输入的金额的格式,由于输入的金额是可以接受负数金额,且还有包含人民币的部分,CN还是有在使用小数位的金额的(例如0.5元),另外有的金额输入会在千位的前方加上逗号(例如45,150),所以在正规表示式的表示就必须包含这几个规则。

PS.我在前面就把逗号先用Replace处理掉了会单纯一点,但其实可以纳入正规表示式的规则里面。

   sInputValue = sInputValue.Replace(",", ""); //Edit by Second 2016.06.27 有的金額欄位會有 4,110 這種方式顯示            string sResult = string.Empty;            string sRegexNum = @"^[-+]?\d+(\.\d+)?$";  //判斷是否為數字的正規表示式            string sRegexInt = @"^-?\d+$";  //判斷是否為整數的正規表示式

要使用EastAsiaNumericFormatter转换成金额必须先下载安装微软.NET推出相关的套件 http://www.microsoft.com/zh-tw/download/details.aspx?id=18970

安装完毕后把InternationalNumericFormatter.dll加入到专案里面。

呼叫时,取决于你要取得大写或是小写亦或者是货币名称传入不同的参数(L、Ln、Lc、Lt),但我使用的这版本的API有一个Bug,转换后的中文大小写如果百位或十位前面是一的话会不显示,所以要自行另外补上。

并在最后如果该数字是整数还要加上多少元整。

//標準格式(L):又稱大寫                //普通格式(Ln):又稱小寫                //貨幣格式(Lc):用來表示貨幣                //字譯格式(Lt):以數字符號字元表現數值資料,只支援日文                //解決EastAsiaNumericFormatter 轉換後的數字 如果是金額會有顯示的異常                //轉換後4110 = 四千一百十  ==> 十之前需要多補一個一                string sInput =                    EastAsiaNumericFormatter.FormatWithCulture(                    moneyChar ? "L" : "Ln", dInput,                    null, new CultureInfo("zh-TW"));                string pattern = moneyChar ?                        "[^壹貳參肆伍陸柒捌玖]拾" :                        "[^一二三四五六七八九]十";                string one = moneyChar ? "壹" : "一";                string res = Regex.Replace(sInput, pattern, m =>                {                    return m.Value.Substring(0, 1) + one +                        m.Value.Substring(1);                });                if(moneyChar){                    if (bInt == true ) //只有整數的部分                    {                        sResult = res + "元整";                    }                    else { //含有小數金額的部分 須轉換成角和分                        sResult = CovertDecPart(res);                    }                }
原创粉丝点击