日期:2014-05-16  浏览次数:20489 次

金额大小写转换(JS+正则)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function test(cash) {
	var num = cash;
	//将cash字符串以0开头的部分删除并赋值给num,传入的cash不能是以0开头的数字,否则会自动转换为八进制数
	for (var i=0; i < cash.length; i++){
		if (cash.substr(i,1) == 0)
			num = cash.substring(i+1);
		else
			break;
	}
	var strOutput = "";
	var strUnit = '仟佰拾亿仟佰拾万仟佰拾元角分';
	num += "00";
	var intPos = num.indexOf('.');
	if (intPos >= 0)
		//消除num中的'.',如果没有则添加00到末尾
		num = num.substring(0, intPos) + num.substr(intPos + 1, 2);
	if(num.length > strUnit.length){
		return "输入的金额超过万亿,不能转换";
	}
	//strUnit字符串同num数字金额以右部对齐时一一对应
	strUnit = strUnit.substr(strUnit.length - num.length);
	//逐个转换数字为大写并赋予相对应的单位,即对应在strUnit中的单位,,需要注意的是replace第二个参数$1,为替代第一个小括号里的变量,这一点同Perl里面的=~ s /(replace code)/$1/差不多,具体查询Perl匹配模式的替代
	for (var i=0; i < num.length; i++)
		strOutput += '零壹贰叁肆伍陆柒捌玖'.substr(num.substr(i,1),1) + strUnit.substr(i,1);
	return strOutput.replace(/零[仟佰拾角分]/g, '零').replace(/零{2,}/g, '零').replace(/零([亿万元])/g, '$1').replace(/亿万/, '亿').replace(/([元角])零/, '$1整').replace(/^([元整零])/, "零元");
};
</script>
</head>
<body>
<input type="button" name="test1" value="Test"
	onclick="alert(test('999010256300.30'));"></input>
</body>
</html>