JavaScript实现价格输入控制并翻译为中文大写结合

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript实现价格输入控制并翻译为中文大写结合相关的知识,希望对你有一定的参考价值。


1、html部分

<div>
	<input type="text" maxlength="12" name="je" placeholder="请输入价格" onkeyup="priceInput(this)" />
	<div id="showVal"></div>
</div>

<script src="./index.js"></script>

2、javascript部分

function priceInput(obj) 
	// 清除数字和点以外的字符
	obj.value = obj.value.replace(/[^\\d.]/g, "");
	// 验证第一个字符是否是数字,也就是是第一个字符不能是点
	obj.value = obj.value.replace(/^\\./g, "");
	// 只保留第一个点, 清除多余的点
	obj.value = obj.value.replace(/\\.2,/g, ".");
	obj.value = obj.value.replace(".", "$#$").replace(/\\./g, "").replace("$#$", ".");
	// 只能输入两个小数
	obj.value = obj.value.replace(/^(\\-)*(\\d+)\\.(\\d\\d).*$/, '$1$2.$3');

	// 此处控制的是如果没有小数点,首位不能为0,类似于01、02的金额
	if (obj.value.indexOf(".") < 0 && obj.value != "") 
		if (obj.value.substr(0, 1) == '0' && obj.value.length == 2) 
			obj.value = parseFloat(obj.value);
		
	 else  // 此处控制的是如果有小数点,整数如果大于等于两位,第一位不能为0,类似于01.16、02.77的金额
		let val = obj.value,
			beforePoint = val.split('.')[0],
			afterPoint = val.split('.')[1];
		if (beforePoint.length >= 2 && beforePoint[0] == 0) 
			obj.value = `$beforePoint.substring(1).$afterPoint`;
		
	

	document.getElementById('showVal').innerText = this.toChineseMoney(obj.value);


function toChineseMoney(n) 
	let unit = "仟佰拾亿仟佰拾万仟佰拾圆角分",
		str = "";
		n += "00";
	let p = n.indexOf('.');

	if (p >= 0) n = n.substring(0, p) + n.substr(p + 1, 2);

	unit = unit.substr(unit.length - n.length);
	for (let i = 0; i < n.length; i++) str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);

	return str.replace(/零(仟|佰|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|圆)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^圆零?|零分/g, "").replace(/圆$/g, "圆整");

以上是关于JavaScript实现价格输入控制并翻译为中文大写结合的主要内容,如果未能解决你的问题,请参考以下文章

HTML+JavaScript实现input框输入控制多种输入控制

input输入框,控制只能输入两位小数点输入价格(原生)

专业知识普及:同样是AOC或AOP的酒,为什么价格就不一样?

如何在浏览器中将 C++ 编译为 JavaScript?

JavaScript-用数组方法实现查询商品案例

如何从 Javascript 中获取值以输入文本表单?