javaScript正則匹配漢字與特殊字元(項目中遇到關鍵字匹配的方法)

來源:互聯網
上載者:User

項目裡要做個一個checkbox關鍵字的防止重複功能,使用js解決的思路如下:

  1、擷取所有checkbox的text,然後放在數組內

  2、輸入關鍵字迴圈數組,使用indexOf判斷

說明:因為checkbox的text中可能出現特殊字元,所以要把特殊字元處理掉

var str = "keyWrod";
var ch = /[\u4E00-\u9FA5\uF900-\uFA2D]/;var symbol =/([.*+?^${}()|[\]\/\\])/;for(var i=0;i<str.length;i++){  var c = str.charAt(i);  if (ch.test(c)){
    alert(c);  }
  if(symbol.test(c)){
    alert(c)
  }}

-------------------------------分割線-----------------------

完整代碼如下(代碼中迴圈判斷有點多,本人JS能力有限,希望有人能提供其它解決思路或方法):

function checkKeyWords(){    var keyWordsArray =  [];    //checkboxlist name    var objArray = ['industrialCatalogue','businessCatalogue','industrialCatalogue'];    keyWordsArray = getAllKeyWords(objArray,keyWordsArray);    var keyword ;

    var companyCatalogueDesc = $("#companyCatalogueDesc").val().toLowerCase( );//擷取輸入內容

    var ch = /[\u4E00-\u9FA5\uF900-\uFA2D]/;
    var symbol =/([.*+?^${}()|[\]\/\\][0-9])/;
    var en = /[a-z]/;
    var descStr = "";
    for(vari=0;i<companyCatalogueDesc.length;i++){
      c = companyCatalogueDesc.charAt(i);
      if((!symbol.test(c)&&ch.test(c))||en.test(c)){
        descStr = descStr+c;
       }
    }
    descStr = descStr.toUpperCase(); 
    for ( var i = 0; i < keyWordsArray.length; i++) {
      if(keyWordsArray[i]!=undefined){
        keyword = keyWordsArray[i];
        if(descStr.indexOf(keyword)>-1){
          alert("類別重複,請從上面選擇");
          $("#keyText").focus();
          return ;
          }
        }
      }
    }

//擷取頁面元素所有關鍵字function getAllKeyWords(objArray,keyWordsArray){    var keyWord;    for ( var i = 0; i < objArray.length; i++) {        $("input[name='"+objArray[i]+"']").each(function(){            keyWord = $("label[for='"+$(this).attr('id')+"']").text();            keyWordsArray.push(getChildKeyWord(keyWord,keyWordsArray));        })    }    return keyWordsArray;}//擷取元素中特殊字元分割出的關鍵字function getChildKeyWord(keyWord,keyWordsArray){    var s2="";    var ch = /[\u4E00-\u9FA5\uF900-\uFA2D]/;    var symbol =/([.*+?^${}()|[\]\/\\])/;    for(var i=0;i<keyWord.length;i++){        var c = keyWord.charAt(i);        if(symbol.test(c)&&!ch.test(c)){            s2 = keyWord.substr(0,i);            keyWord = keyWord.substr(i+1,keyWord.length);            if(s2!=""){                keyWordsArray.push(getChildKeyWord(keyWord,keyWordsArray));            }        }else{            s2 = s2+c;        }    }    if(s2!=""){        return s2;    }}

-------------------------------分割線-----------------------

本來想在後台使用Lucene使用分詞來判斷,但是Lucene用的不熟悉並且客戶催的緊,所以使用了JS的方式。有時間用Lucene試試。

 

2012/09/14修改說明:

  把擷取輸入內容companyCatalogueDesc中的字元與數字過濾掉,然後在進行關鍵詞匹配。代碼比較,可以進行重構。切勿直接copy+c/v,重構後在應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.