首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

怎么将输入的值进行转为特定字符串

2014-01-21 
如何将输入的值进行转为特定字符串?字符串的格式为:RB/PC/PB/记-201401-001(凭证字-6位年月-3位序号)“.”代

如何将输入的值进行转为特定字符串?
字符串的格式为:RB/PC/PB/记-201401-001(凭证字-6位年月-3位序号)

“.”代表指定字串结束

凭证字的代码
“0”代表:RP
“1”代表:PC
“2”代表:PB
“3”代表:记

6位年月
“0”为系统时间的本年
“1”为系统时间的上一年(即现在为2014那么就为2013)
月份自动补“0”为两位

3位序号
自动补“0”为三位

效果如:
当前系统时间为2014年

当输入:0.01.1      Enter(回车)文本内容则转为RB-201401-001
当输入:1.110.12    Enter(回车)文本内容则转为PC-201310-012
当输入:3.03.198    Enter(回车)文本内容则转为记-201403-198
当输入:2.112.13    Enter(回车)文本内容则转为PB-201312-013

献上最后的29分,期待大神支招,本人十分感激!
[解决办法]

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'));

[解决办法]
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'))
[解决办法]

<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>

[解决办法]
不用这么复杂:
<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

热点排行