javaScript正则匹配汉字与特殊字符(项目中遇到关键字匹配的方法)

项目里要做个一个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,重构后在应用

你可能感兴趣的:(JavaScript)