js金额处理工具

直接上代码:



//
//	金额转换函数 
//


var Nums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); 
var Digits = new Array("", "拾", "佰", "仟"); 
var Units = new Array("", "万", "亿", "万亿","仟兆"); 

/**
* 检查字符串是否为合法的金额
* @param {String} 字符串
* @return {bool} 是否为合法金额
*/
function isMoney(s) 
{
	var isMoney = RegExp(/^[0-9]*\.?[0-9]{0,2}$/);
	return ( isMoney.test(s) );
}
/**
 * 检验银行账号
 */
function isBankNo(s) 
{
	//var isBankNo = RegExp(/(^[1-9]\d{12}$)|(^[1-9]\d{20}$)/);
	var isBankNo = RegExp(/^[1-9]\d{11,19}$/);
	return ( isBankNo.test(s) );
}
/**
 * 金额合法校验
 */
function isMoneyTrue(s){
	
	var isMoneyTrue = RegExp(/^(([1-9][0-9]*)|(([0]\.\d{1,4}|[1-9][0-9]*\.\d{1,4})))$/);
	return ( isMoneyTrue.test(s) );
	
}

/**
* 判断输入变量是否是浮点数
* @param {String} 要检查的变量值
* @return {bool} 是否为浮点数
*/
function isFloat( s )
{
	var isFloat = RegExp(/^([0-9]+(\.+))[0-9]+$/);
	return ( isFloat.test(s) );
}

/**
* 检查指定的input中输入的金额是否合法,如果合法返回金额,否则返回null
* @param {String} 要检查的input的id
*/
function getMoney(inputName)
{
	var money = document.getElementById(inputName).value;
	if ( money !=null && money.length>0 )
	{
		return removeComma( money );
	}else{
		return null;
	}
}
/**
* 检查指定的money中输入的金额是否合法,如果合法返回金额,否则返回null
*/
function getMoneyNotInput(money)
{
	if ( money !=null && money.length>0 )
	{
		return removeComma( money );
	}else{
		return null;
	}
}
/**
* 检查指定的input中输入的金额是否合法,并进行显示转换
* @param {String} 要检查的input的id
*/
function checkMoney(inputName)
{
	var input = document.getElementById(inputName);
	if ( isEmpty( input.value ) )
	{
		return false;
	}
	var testMoney = removeComma( input.value );
	if ( isMoney( testMoney ) )
	{
		input.value = toCashWithCommaAndDot( testMoney );
		return true;
	}else{
		input.value = "";
		input.focus();
		return false;
	}
} 

/**
* 转换为中文金额表示
* @param {String} 要转换的金额字符串
* @return {String} 转换后的金额字符串
*/
function toChineseCash( cash )
{
	var noCommaCash = removeComma(cash);
	if( !isFloat( noCommaCash ) )
		return convertIntegerToChineseCash(noCommaCash);	
			
	var dotIndex = noCommaCash.indexOf('.');
	var integerCash = noCommaCash.substring( 0, dotIndex );
	var decimalCash = noCommaCash.substring( dotIndex + 1 );
	
	return convertIntegerToChineseCash(integerCash)+convertDecimalToChineseCash(decimalCash);
}

/**
* 为金额添加,分割符
* @param {String} 要转换的金额字符串
* @return {String} 转换后的金额字符串
*/
function toCashWithComma( cash )
{
	while( cash.charAt(0) == '0' )
	{
		cash = cash.substr(1);
	}
	if( !isFloat( cash ) )
		return addComma(cash);	
			
	var dotIndex = cash.indexOf('.');
	var integerCash = cash.substring( 0, dotIndex );
	var decimalCash = cash.substring( dotIndex );
	
	return addComma(integerCash)+decimalCash;
}

/**
* 为金额添加.分割符
* @param {String} 要转换的金额字符串
* @return {String} 转换后的金额字符串
*/
function toCashWithDot( cash )
{
	var temp = cash;
	if ( temp.length == 0 )
	{
		return "0.00";
	}
	var dotPos = temp.indexOf(".");
	if ( dotPos < 0 )
	{
		return temp+'.00';
	}
	if ( dotPos == 0 )
	{
		temp = '0' + temp;
		dotPos = temp.indexOf(".");
	}
	if ( dotPos == temp.length-2)
	{
		return temp + '0';
	}
	if ( dotPos == temp.length-1)
	{
		return temp + '00';
	}
	return temp;
}

/**
* 为金额添加,分割符和.分割符
* @param {String} 要转换的金额字符串
* @return {String} 转换后的金额字符串
*/
function toCashWithCommaAndDot( cash )
{
	var temp = toCashWithComma( cash );
	if ( temp.length == 0 )
	{
		return "0.00";
	}
	var dotPos = temp.indexOf(".");
	if ( dotPos < 0 )
	{
		return temp+'.00';
	}
	if ( dotPos == 0 )
	{
		temp = '0' + temp;
		dotPos = temp.indexOf(".");
	}
	if ( dotPos == temp.length-2)
	{
		return temp + '0';
	}
	if ( dotPos == temp.length-1)
	{
		return temp + '00';
	}
	return temp;
}

function convertIntegerToChineseCash(cash)
{
	if ( cash == "0" )
		return "";
    var S = ""; //返回值 
    var p = 0; //字符位置指针 
    var m = cash.length % 4; //取模 

    // 四位一组得到组数 
    var k = (m > 0 ? Math.floor(cash.length / 4) + 1 : Math.floor(cash.length / 4)); 
    // 外层循环在所有组中循环 
    // 从左到右 高位到低位 四位一组 逐组处理 
    // 每组最后加上一个单位: "[万亿]","[亿]","[万]" 
    for (var i = k; i > 0; i--) 
    {
        var L = 4; 
        if (i == k && m != 0)
        {
            L = m;
        }
        // 得到一组四位数 最高位组有可能不足四位 
        var s = cash.substring(p, p + L);
        var l = s.length;

        // 内层循环在该组中的每一位数上循环 从左到右 高位到低位 
        for (var j = 0;j < l;j++)
        {
            var n = parseInt(s.substring(j, j+1));
            if (n == 0)
            {
                if ((j < l - 1) && (parseInt(s.substring(j + 1, j + 1+ 1)) > 0) //后一位(右低) 
                    && S.substring(S.length-1,S.length) != Nums[n])
                {
                    S += Nums[n];
                }
            }
            else 
            {
                //处理 1013 一千零"十三", 1113 一千一百"一十三" 
                //if (!(n == 1 && (S.substring(S.length-1,S.length) == Nums[0] | S.length == 0) && j == l - 2)) 
                //{
                    S += Nums[n];
                //}
                S +=  Digits[l - j - 1];
            }
        }
        p += L;
        // 每组最后加上一个单位: [万],[亿] 等 
        if (i < k)//不是最高位的一组 
        {
            if (parseInt(s)!= 0)
            {
                //如果所有 4 位不全是 0 则加上单位 [万],[亿] 等 
                S += Units[i - 1];
            }
        }
        else
        {
            //处理最高位的一组,最后必须加上单位 
            S += Units[i - 1];
        }
    }
	//alert(S);
	return S+"圆";
}

function convertIntegerToChineseCash_W(cash)
{
	if ( cash == "0" )
		return "";
    var S = ""; //返回值 
    var p = 0; //字符位置指针 
    var m = cash.length % 4; //取模 

    // 四位一组得到组数 
    var k = (m > 0 ? Math.floor(cash.length / 4) + 1 : Math.floor(cash.length / 4)); 
    // 外层循环在所有组中循环 
    // 从左到右 高位到低位 四位一组 逐组处理 
    // 每组最后加上一个单位: "[万亿]","[亿]","[万]" 
    for (var i = k; i > 0; i--) 
    {
        var L = 4; 
        if (i == k && m != 0)
        {
            L = m;
        }
        // 得到一组四位数 最高位组有可能不足四位 
        var s = cash.substring(p, p + L);
        var l = s.length;

        // 内层循环在该组中的每一位数上循环 从左到右 高位到低位 
        for (var j = 0;j < l;j++)
        {
            var n = parseInt(s.substring(j, j+1));
            if (n == 0)
            {
                if ((j < l - 1) && (parseInt(s.substring(j + 1, j + 1+ 1)) > 0) //后一位(右低) 
                    && S.substring(S.length-1,S.length) != Nums[n])
                {
                    S += Nums[n];
                }
            }
            else 
            {
                //处理 1013 一千零"十三", 1113 一千一百"一十三" 
                //if (!(n == 1 && (S.substring(S.length-1,S.length) == Nums[0] | S.length == 0) && j == l - 2)) 
                //{
                    S += Nums[n];
                //}
                S +=  Digits[l - j - 1];
            }
        }
        p += L;
        // 每组最后加上一个单位: [万],[亿] 等 
        if (i < k)//不是最高位的一组 
        {
            if (parseInt(s)!= 0)
            {
                //如果所有 4 位不全是 0 则加上单位 [万],[亿] 等 
                S += Units[i - 1];
            }
        }
        else
        {
            //处理最高位的一组,最后必须加上单位 
            S += Units[i - 1];
        }
    }
	//alert(S);
	return S+"萬圆";
}

function convertDecimalToChineseCash( cash )
{
	var returnCash = "";
	
	if ( cash == "00" )
		returnCash = "整";
	else
	{
		for( var i = 0;i < cash.length; i++ )
		{
			if( i >= 2 )
				break;
			var intValue = parseInt(cash.charAt(i));
		
			switch( i )
			{
				case 0:
					if ( intValue != 0 )
						returnCash += Nums[intValue]+"角";
					break;
				case 1:
					returnCash += Nums[intValue]+"分";
					break;
				default:
					break;
			}
		}
		
	}
	return returnCash;	
}

function addComma(str) {
	if (str.length > 3) 
	{
		var mod = str.length % 3;
		var output = (mod > 0 ? (str.substring(0,mod)) : '');
		for (i=0 ; i < Math.floor(str.length / 3); i++) {
			if ((mod == 0) && (i == 0))
				output += str.substring(mod+ 3 * i, mod + 3 * i + 3);
			else
				output += ',' + str.substring(mod + 3 * i, mod + 3 * i + 3);
		}
		return (output);
	}
	else return str;
}

function removeComma(str)
{
	return str.replace(new RegExp('\,',["g"]),'');
}

/**
* 检查金额域值得有效性
* @param {String} 金额域的id
*/
function checkMoneyField(moneyFieldId){
	var input = document.getElementById(moneyFieldId);
	if ( isEmpty( input.value ) )
	{
		alert("输入金额值不能为空");
		return false;
	}
	if(!checkMoney(moneyFieldId)){
		alert("输入金额格式不正确");
		return false;
	}
	var amtShow = getMoney(moneyFieldId);
	if(amtShow == 0){
		alert("输入金额必须大于0");
		return false;
	}
	return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式是一种用来匹配字符串模式的工具。在金额校验中,我们可以使用正则表达式来验证金额的合法性。根据提供的引用内容,以下是一些常用的金额校验的正则表达式及其解释: 1. 对于处理金额的正则表达式,可以使用以下表达式进行验证: ```javascript ^[1-9]\d*(\.\d{1,2})?$ ``` 解释如下: - `^`:表示匹配字符串的开头。 - `[1-9]`:表示匹配1-9之间的任意数字。 - `\d*`:表示匹配0个或多个数字。 - `(\.\d{1,2})?`:表示小数点后面可以有1到2位数字,并且整个小数部分是可选的。 - `$`:表示匹配字符串的结尾。 2. 另一个常见的金额校验正则表达式是: ```javascript ^(?!0\d)(<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [用于验证金额的正则表达式](https://blog.csdn.net/u010150082/article/details/8900114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [正则表达式校验交易金额](https://blog.csdn.net/gehong3641/article/details/122204230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值