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,重构后在应用

原文地址:https://www.cnblogs.com/GYoungBean/p/2683078.html