之前有写过有关钱的系统,所以不免俗会跟银行一样有阿拉伯数字转中文大小写的需求,使用这篇文章分享一下如何使用正规表示式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);
}
}