zoukankan      html  css  js  c++  java
  • 数字转中文大写

    数字转中文大写

      代码1:(实现到小数点后百分位)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>数字中文大小写转换</title>
    </head>
    
    <body>
    
        请输入金额:<input type="text" id="content">
        
        <div style="margin-top:20px;">
            转换的结果是:<span id="resl" style="color:red; margin-left:20px;"></span>
        </div>
        <script>
        
            var oContent = document.getElementById("content");
            var oChange = document.getElementById("change");
            var oResl = document.getElementById("resl");
                oResl.innerHTML="输出结果";
            oContent.onkeyup = function() {
                var n = oContent.value;
                    if (/^0|[A-Za-z]+$/.test(n))
                        {
                            alert("数据非法,请输入数字!");
                        }
                    else{
                        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);
                        }
                    }
                    oResl.innerHTML = str.replace(/零(千|百|拾|角)/g, "").replace(/(零)+/g, "").replace(/零(万|亿|元)/g, "$1").replace(/零分$/g, "").replace(/元$/g, "元整");
            
            } //代码结束
        </script>
    </body>
    </html>

      代码2:(实现到小数点后万分位)带注释-详细分析过程

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>数字中文大小写转换</title>
    </head>
    
    <body>
    
    <input type="text" id="content">
    
    <div style="margin-top:20px;">
        转换的结果是:<span id="resl" style="color:red; margin-left:20px;"></span>
    </div>
    <script>
    
    var oContent = document.getElementById("content");
    var oChange = document.getElementById("change");
    var oResl = document.getElementById("resl");
        oResl.innerHTML="未知";
        //alert(oChange);
        
    oContent.onkeyup = function() {
        //alert("111")
        var n = oContent.value;
        //alert(n)
                // (!/^(0|[1-9]d*)(.d+)?$/.test(n))
            if (/^0|[A-Za-z]+$/.test(n))//正则表达式表示法  以双斜杆包围的正则表达式对象,如: /abc/
                // ^:匹配一个输入或一行的开头,/^a/匹配"an",而不匹配"An"
                // $:匹配一个输入或一行的结尾,/a$/匹配"na",而不匹配"nA"
                // :转义字符
                // d 匹配一个字数字符,/d/ = /[0-9]/ 
                //[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
                //x|y 匹配x或y 
                // *:匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
                // ?:匹配前面元字符0次或1次,/ba*/将匹配b,ba
                // +:匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa 
                // text() 检测方法   
                {
                    alert("数据非法,请输入数字!");
                    //return "数据非法";
                }
            else{
                    //alert("合法")
                var unit = "千百拾亿千百拾万千百拾元角分厘毫", str = "";
                    n += "0000";
                    //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 0,1...,如果没有就返回-1。
                var p = n.indexOf('.');
                if (p >= 0){
                    //substring() 方法用于提取字符串中介于两个指定下标之间的字符 stringObject.substring(start,stop)
                    //substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。stringObject.substr(start,length)
                    
                        n = n.substring(0, p) + n.substr(p+1, 4);  //将输入数字中的“.”去掉,如125.02,变成12502
                        //alert(n);
                    }
                    //alert("n的值为:"+n);
                    unit = unit.substr(unit.length - n.length);
                    //alert("unit截取到的值为:"+unit);
                for (var i=0; i < n.length; i++)
                    //charAt() 方法可返回指定位置,的字符. 注意:参数是位置,是下标,返回是“字符”。
                    str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);  //逐个拼合数字转化的结果
                }    
                //alert("初步得到的结果为:"+str);            
                //replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
                //语法: stringObject.replace(regexp/substr,replacement)  一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
                // 双斜杆之间为正则表达式  /零(千|百|拾|角)/ 
                //i 执行大小写不敏感的匹配 
                //g 执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了
                // 输入1: 得到的初始结果str为: 壹元零角零分
                                             //壹元零零分                     壹元零分         
                    // $1:表示正则表达式中:/零(万|亿|元)/g 的第一个括号部分(万|亿|元),因此产生的效果是,将正则表达式:/零(万|亿|元)/g 所有的匹配内容,用$1:(万|亿|元) 的内容去替换。  
                    // 假如第一个是:零亿  将用  亿 去替换。 从而实现删除零的作用。 妙哉妙哉                                                 
                oResl.innerHTML = str.replace(/零(千|百|拾|角|分|厘)/g, "").replace(/(零)+/g, "").replace(/零(万|亿|元)/g, "$1").replace(/零毫$/g, "").replace(/元$/g, "元整");
               //return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
    
        }
    
    </script>
    </body>
    </html>

      过程分析图



      本文源于个人见解,如有不足,欢迎指正。

      参考链接:http://www.cnblogs.com/zsanhong/p/3509464.html

      正则表达式大全链接:http://www.jb51.net/article/43190.htm  (讲解非常详细完整)

  • 相关阅读:
    C# 延时不卡界面
    C++ 转C#
    CYQ数据库配置
    VB Modbus RTU CRC 校验
    开始写博客了
    简单工厂模式
    单例模式
    基础、hibernate目前应用的对比
    QT Creator 代码自动补全---快捷键设定
    C# CMD直接运行语句
  • 原文地址:https://www.cnblogs.com/banana618859/p/6307780.html
Copyright © 2011-2022 走看看