读书人

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

发布时间: 2014-01-21 00:35:39 作者: rapoo

如何将输入的值进行转为特定字符串?
字符串的格式为: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

读书人网 >JavaScript

热点推荐