zoukankan      html  css  js  c++  java
  • 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,重构后在应用

  • 相关阅读:
    node基础和express服务器框架知识点总结
    Nacos配置服务原理
    Queue-PriorityQueue源码解析
    Mysql存储结构
    Mybatis处理动态占位符实现
    通过ThreadPoolExecutor源码分析线程池实现原理
    jdk8函数接口
    Logback源码分析
    Spring注解Component原理源码解析
    ApplicationListener原理分析
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/2683078.html
Copyright © 2011-2022 走看看