如何将输入的值进行转为特定字符串?
字符串的格式为: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'));
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)">//ma[3]%13;//担心月份超出12
<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>