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  (讲解非常详细完整)

  • 相关阅读:
    LVS基于DR模式负载均衡的配置
    Linux源码安装mysql 5.6.12 (cmake编译)
    HOSt ip is not allowed to connect to this MySql server
    zoj 3229 Shoot the Bullet(无源汇上下界最大流)
    hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
    poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
    URAL 1430 Crime and Punishment
    hdu 2048 神、上帝以及老天爷(错排)
    hdu 3367 Pseudoforest(最大生成树)
    FOJ 1683 纪念SlingShot(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/banana618859/p/6307780.html
Copyright © 2011-2022 走看看