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

  • 相关阅读:
    uniapp,获取用户地理位置信息授权,如果拒绝的话需要引导用户重新请求授权操作
    sql group by 之别扭
    echart.js 遇到的问题及解决
    sql 时间截取 分组 获得小时数据常用的方法
    使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
    C#中Math.Round()实现中国式四舍五入
    layui js出现一个form内和外的button 事件怪事
    Sql Server 查询指定范围(一周,一月,本周,本月等)内的数据
    java jdk1.6低版本ssm 源码的的在idea的搭建
    一个 jQuery循环获取点击事件,显示tab 子页
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/2683078.html
Copyright © 2011-2022 走看看