js金额自动转换城大写
一、实现思路
1.定义一个文本框,获取用户输入数字,触发一个事件转换成大写追加到页面展示
下面展示一些 代码片段
。
// 定义input文本框
<tr id="wdcjTr">
<th>我的出价(元):</th>
input id="jpj" class="jia" type="text" onkeyup="if(isNaN(value))execCommand('undo');formatJe('jpj');" onafterpaste="if(isNaN(value))execCommand('undo');formatJe('jpj');" style="text-align:right;" maxlength="15" />
</td>
</tr>
这里使用了onkeyup事件,表示获取用户在键盘上按下键盘的数字。除onkeyup,这里还对非数字数据有效性进行校验,避免字母、字符等错误输入。
2.引入js转换脚本
/*
*金额转换
*/
function formatJe(id){ //文本框调用这个函数名
var newNum=document.getElementById(id).value; //根据id获取文本框的value
if(newNum!=null&&newNum!=""){ //判断输入数值是否为空
var newNumFormat=fmoney(newNum, 2); //保留小数点后两位
document.getElementById("jeNum"+id).innerHTML=newNumFormat;
var newNumFormatDx=DX(newNum); //再次调用DX函数 这里传入一个newNum参数过去
document.getElementById("jeDx"+id).innerHTML=newNumFormatDx; //然后再页面追加转换过后的大写值
}else{
//若是判断数值是否为空则不做处理
document.getElementById("jeNum"+id).innerHTML="";
document.getElementById("jeDx"+id).innerHTML="";
}
}
/*
* 金额大写
*/
function DX(n) {
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
return "数据非法";
if(n==0)
return "零圆";
var unit = "千百拾亿千百拾万千百拾元角分", str = "";
n += "00";
var p = n.indexOf('.');
if (p >= 0)
n = n.substring(0, p) + n.substr(p+1, 2);
unit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++)
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
//上面这段是组装传入的n值,然后通过 return 返回给调用方
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|百(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
}
效果预览如下:
完~