function convertTo(str){
    var arr     =   str.split('.'),//将原字符串以.分割字符串为数组
        zeroize =   ['000','00','0',''];//补零数组
    return  arr.length == 3 
                ? [
                        //转换凭证字代码[容错:当其超出数组长度时返回原字符串]
                        ['RB','PC','PB','记'][arr[0]] || arr[0],
                        
                        //转换年份::以截取的第一个字符作为数组的索引,返回其匹配值[容错:超出定义的数组长度时返回当前年份]
                        ([new Date().getFullYear(),new Date().getFullYear() - 1][arr[1].substr(0,1)] || new Date().getFullYear())
                        +
                        //转化月份,长度不足两位时补0
                        zeroize[arr[1].length] + arr[1].substr(1),
                        
                        //转换序号::长度大于3时,返回前3位,长度等于0时,返回000
                        arr[2].length > 3 
                            ? arr[2].substr(0,3) //容错:长度大于3时
                            : zeroize[arr[2].length] + arr[2]
                  ].join('-')
                : '字符串格式错误:'+ str;  
};
alert([convertTo('0.01.1'),convertTo('1.110.12'),convertTo('3.03.198'),convertTo('2.112.13')].join('\n\n'));

解决方案 »

  1.   

    var o1={'0':'RP','1':'PC','2':'PB','3':'记'};
    var o2={'0':new Date().getFullYear(),'1':parseInt(new Date().getFullYear())-1}
    var addStr=['0','00'];
    function convert(obj){
    var msg='';
    var rule=/^[0-3][.]\d{1,3}[.]\d{1,3}$/;
    var rule2=/^([0-3])[.]([0-1]((0[1-9])|(1[0-2])))[.](\d{1,3})$/;
    var array=[];
    if (obj && typeof obj=='string') {
    array=obj.split('.');
    if (array[1].length<3){
    array[1]=addStr[2-array[1].length]+array[1];
    }
    if (array[2].length<3){
    array[2]=addStr[2-array[2].length]+array[2];
    }
    obj=array.join('.');
    array=[];
    if (obj.match(rule2))
    {
    return convertFormat(obj.match(rule2))
    }else {
    //msg+='输入格式不正确'
    return '输出格式不正确';
    alert(msg)
    }
    }else {
    //msg+='无输入\n';
    return '无输入';
    }
    function convertFormat(arr){
    array[0]=o1[arr[1]];
    array[1]=o2[arr[2].charAt(0)]+arr[3];
    array[2]=arr[6];
    return array.join('-');
    }
    }
    alert(convert('1.12.4'))
      

  2.   

    <html>
    <head>
    <title> New Document </title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <script type="text/javascript">
    <!--
    // 用法:InputUtil.changeTo('0.01.1');
    var InputUtil = (function(){
    var date = new Date();
    // 存放凭证字,用键值对应
    var pzzMap = {"0":"RP","1":"PC","2":"PB","3":"记"}
    // 存放年
    var yearMap = {"0":date.getFullYear(),"1":(date.getFullYear() - 1)}
    var splitChar = '-'; // 连接符

    // 简单的格式化函数
    // 如format(2,1) -> 01,format(3,12) -> 012
    function format(len,input) {
    var zeroCount = len - (input+'').length;
    for(var i=0;i<zeroCount;i++) {
    input = '0' + input;
    }
    return input;
    } return {
    changeTo:function(inputStr) {
    var inputArr = inputStr.split('.'); var yearNo = inputArr[1].substring(0,1);
    var month = inputArr[1].substring(1);

    return [
    pzzMap[inputArr[0]]
    ,(yearMap[yearNo] + format(2,month))
    ,format(3,inputArr[2])
    ].join(splitChar);
    }
    }})();// 回车事件
    function enterHandler(e) {
    var e = e || window.event;
    var target = e.target || e.srcElement; // 获取input控件
    if(e.keyCode == 13){ 
    // 略去验证操作
    // ...
    var value = target.value; // 获取输入内容
    // 转换
    target.value = InputUtil.changeTo(value);
    }
    } //alert(InputUtil.changeTo('0.01.1'))
    //alert(InputUtil.changeTo('3.03.198'))
    //-->
    </script>
     </head> <body>
      <input type="text" name="a" onkeypress="enterHandler()" > <br>
      <input type="text" name="a" onkeypress="enterHandler()" > <br>
      <input type="text" name="a" onkeypress="enterHandler()" > <br>
     </body>
    </html>
      

  3.   

    不用这么复杂:<input type="text" onblur="fun(this)">
    <script>
    function fun(obj){
        var arr=["RP","PC","PB","记"],ma,y = new Date().getFullYear();
        if(ma=obj.value.match(/^([0123])\.([01])(\d{1,2})\.(\d{1,3})$/)){
            obj.value = arr[ma[1]]+"-"+(y-ma[2])+("0"+ma[3]%13).slice(-2)+"-"+("00"+ma[4]).slice(-3);
        }else{
            obj.value="";alert("格式有误!");
        }
    }
    </script>        //ma[3]%13;//担心月份超出12
            //("0"+?).slice(-2);//自动补0