javascript 编写的代码编辑器函数验证函数

<script>
function serch_function(v){
var a=['abc','jjj','ccc','ddd'];
var b={'abc':'0','jjj':'','ccc':'3','ddd':'1,2'}//参数个数:‘’空不限,‘0’无参数,‘1,’ 最少1, ‘,2’最多2 ‘1,2’前后都限制,‘3’有且只有3个
for(var i in a){
if(v==a[i]){
var a=b[v].split(',');
if(a.length>1){
if(a[0]==''){
a[0]=0
}
if(a[1]==''){
a[1]=99;
}
}
return a;
}
}
return false;
}

 

function ch_function(s){

var obj=[];
var ch=1;
var zhan=[];
var para=0;
var hname=0;
var para_fun=0;
var error='';
if(s!=''){

st:
for(i=0;i<s.length;i++){

switch(s[i]){
case ' ':
if(ch==0){
ch=1;
zhan=[];
}else{
if(para==1||hname==1){
zhan.push(s[i]);
}else{
zhan=[];
}
}
break;
case '(':
var chk_bak=serch_function(zhan.join('').replace(/\s/g,''));
if(chk_bak){
obj.push([chk_bak]);
zhan=[];
para=1;
}else{
zhan=[];
error='没有此函数';
break st;
}
break;
case ',':
if(para==1){
if(zhan.join('').replace(/\s/g,'')==''&&para_fun==0){
error='参数不能为空';
break st;
}
obj[obj.length-1].push(zhan.join('').replace(/\s/g,''));
zhan=[];
}

break;
case ')':
if(para==1){
if(obj[obj.length-1].length>1){
if(zhan.join('').replace(/\s/g,'')!=''||para_fun==1){
obj[obj.length-1].push(zhan.join('').replace(/\s/g,''));
para_fun=0;
}else{
error='参数不能为空';
break st;
}
}else{
if(zhan.join('').replace(/\s/g,'')!=''||para_fun==1){
obj[obj.length-1].push(zhan.join('').replace(/\s/g,''));
para_fun=0;
}
}
if(obj[obj.length-1][0].length==1){
if(obj[obj.length-1][0][0]=='0'&&obj[obj.length-1].length>1){
error='参数个数错误';
break st;
}else if(obj[obj.length-1][0][0]>0&&obj[obj.length-1].length-1!=obj[obj.length-1][0][0]){
error='参数个数错误';
break st;
}
}else{
if(obj[obj.length-1].length-1>=obj[obj.length-1][0][0]&&obj[obj.length-1].length-1<=obj[obj.length-1][0][1]){
}else{
error='参数个数错误';
break st;
}
}
zhan=[];
obj.pop();
if(obj.length>0){
para_fun=1;
}else{
para_fun=0;
para=0;
}
}else{
error='括号不对';
break st;
}

break;
default:
if(ch==1){
if(zhan[zhan.length-1]==' '){
zhan=[]
}
zhan.push(s[i])
if(serch_function(zhan.join('').replace(/\s/g,''))){
hname=1;
}else{
hname=0;
}
}

}
//document.getElementById('c').value=Serialize(obj);//测试
//alert(s[i]);
}
}
if(obj.length>0&&error==''){

error='括号不匹配';
}

return error;

}

function ceshi(v){
var vv=ch_function(v);
document.getElementById('b').value=vv;
}

 

function Serialize(obj){
switch(obj.constructor){
case Object:
var str = "{";
for(var o in obj){
str += o + ":" + Serialize(obj[o]) +",";
}
if(str.substr(str.length-1) == ",")
str = str.substr(0,str.length -1);
return str + "}";
break;
case Array:
var str = "[";
for(var o in obj){
str += Serialize(obj[o]) +",";
}
if(str.substr(str.length-1) == ",")
str = str.substr(0,str.length -1);
return str + "]";
break;
case Boolean:
return "" + obj.toString() + "";
break;
case Date:
return "\"" + obj.toString() + "\"";
break;
case Function:
break;
case Number:
return "" + obj.toString() + "";
break;
case String:
return "\"" + obj.toString() + "\"";
break;
}
}
</script>

<!--测试-->
<input type="text" id="a" onclick=ceshi(this.value)>
<input type="text" id="b" >
<input type="text" id="c" style="width:300px;">

posted @ 2013-05-08 09:49  江奇  阅读(194)  评论(0编辑  收藏  举报