JavaScript中两个字符串的匹配
工作中遇到一个问题,两个字符串匹配,要求:每个字符串中最多含有一个*,?可以无限多个
*代表一个任意长度的字符串,而?则代表一个字符
要求可以提示出两个冲突
<inputtype="text"id="str1"><br> <inputtype="text"id="str2"><br> <inputtype="button"onclick="checkMarchX()"value="CHECK">
用JavaScript实现代码如下:
functioncheckMarchX() { varstr1=document.getElementById('str1').value; varstr2=document.getElementById('str2').value; varstr1XPosition=str1.indexOf('*'); varstr2XPosition=str2.indexOf('*'); if(str1XPosition!=-1&&str2XPosition!=-1)//两者都含有* { varposition=str1XPosition>str2XPosition?str2XPosition:str1XPosition;//success if(position!=0) { varpatbeforeStr1=str1.substring(0,position); varpatbeforeStr2=str2.substring(0,position); if(checkMarchQ(patbeforeStr1,patbeforeStr2)) { //alert(str1+'与'+str2+"前半部分冲突"); //然后对应后半部分进行测试 varstr1XBackPosition=str1.length-str1XPosition-1; varstr2XBackPosition=str2.length-str2XPosition-1; varbackposition=str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition; if(backposition==0) { alert(str1+'与'+str2+"冲突"); } else { varpatbackStr1=str1.substring(str1.length-backposition,str1.length); varpatbackStr2=str2.substring(str2.length-backposition,str2.length); if(checkMarchQ(patbackStr1,patbackStr2)) { alert(str1+'与'+str2+"冲突"); } } } } else { //alert(str1+'与'+str2+"前半部分冲突"); varstr1XBackPosition=str1.length-str1XPosition-1; varstr2XBackPosition=str2.length-str2XPosition-1; varbackposition=str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition; if(backposition==0) { alert(str1+'与'+str2+"冲突"); } else { varpatbackStr1=str1.substring(str1.length-backposition,str1.length); varpatbackStr2=str2.substring(str2.length-backposition,str2.length); if(checkMarchQ(patbackStr1,patbackStr2)) { alert(str1+'与'+str2+"冲突"); } } } } elseif((str1XPosition==-1&&str2XPosition!=-1)||(str1XPosition!=-1&&str2XPosition==-1))//有且只有一个字符串含有* { varstrX=str1XPosition==-1?str2:str1;//含有*的字符串 varstrNoX=str1XPosition==-1?str1:str2;//不含*的字符串 if(strX.length-1<strNoX.length) { varposition=strX.indexOf('*'); if(position==0) { //alert(str1+'与'+str2+"前半部分冲突"); varbackposition=strX.length-position-1; if(backposition==0) { alert(str1+'与'+str2+"冲突"); } else { varpatbackStr1=str1.substring(str1.length-backposition,str1.length); varpatbackStr2=str2.substring(str2.length-backposition,str2.length); if(checkMarchQ(patbackStr1,patbackStr2)) { alert(str1+'与'+str2+"冲突"); } } } else { varpatbeforeStr1=str1.substring(0,position); varpatbeforeStr2=str2.substring(0,position); if(checkMarchQ(patbeforeStr1,patbeforeStr2)) { //alert(str1+'与'+str2+"前半部分冲突"); varbackposition=strX.length-position-1; if(backposition==0) { alert(str1+'与'+str2+"冲突"); } else { varpatbackStr1=str1.substring(str1.length-backposition,str1.length); varpatbackStr2=str2.substring(str2.length-backposition,str2.length); if(checkMarchQ(patbackStr1,patbackStr2)) { alert(str1+'与'+str2+"冲突"); } } } } } } else { if(checkMarchQ(str1,str2)) { alert(str1+'与'+str2+"冲突"); } } } functioncheckMarchQ(str1,str2) { varflagque=false; if(str1.length==str2.length) { //长度相同才有可能冲突 for(vari=0;i<str1.length;i++) { if(str1.substr(i,1)!='?'&&str2.substr(i,1)!='?') { if(str1.substr(i,1)!=str2.substr(i,1)) { flagque=false;//表示不冲突 break; } else { flagque=true;//表示冲突 } } } } returnflagque; }
其中*最起码为一个字符,以上程序并没有对输入的合法性进行验证
查看更多JavaScript的语法,大家可以关注:《JavaScript参考教程》、《JavaScript代码风格指南》,也希望大家多多支持毛票票。