javaScript正则匹配汉字与特殊字符(项目中遇到关键字匹配的方法)
2012-09-13 11:46
746 查看
项目里要做个一个checkbox关键字的防止重复功能,使用js解决的思路如下:
1、获取所有checkbox的text,然后放在数组内
2、输入关键字循环数组,使用indexOf判断
说明:因为checkbox的text中可能出现特殊字符,所以要把特殊字符处理掉
-------------------------------分割线-----------------------
完整代码如下(代码中循环判断有点多,本人JS能力有限,希望有人能提供其它解决思路或方法):
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 ;
}
}
}
}
-------------------------------分割线-----------------------
本来想在后台使用Lucene使用分词来判断,但是Lucene用的不熟悉并且客户催的紧,所以使用了JS的方式。有时间用Lucene试试。
2012/09/14修改说明:
把获取输入内容companyCatalogueDesc中的字符与数字过滤掉,然后在进行关键词匹配。代码比较,可以进行重构。切勿直接copy+c/v,重构后在应用
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,重构后在应用
相关文章推荐
- Jquery的validate,清除form方法,显示密插件,正则特殊字符处理,js的call用法,ajax,h5支持情况,elclipse tomcate去掉项目名,js 的原型
- 正则匹配大小写字母、汉字、特殊字符,并统计次数
- PHP 正则匹配 任何字符,包括特殊符号 方法
- js 正则表达式 匹配除汉字,字母,数字,逗号,句号外的特殊字符(用来规范输入内容)
- 使用ICU库中的正则表达式匹配关键字之间含有特殊字符的关键字示例
- PHP与javascript中正则匹配汉字方法
- PHP正则匹配汉字、字母、数字和下划线,不含特殊字符
- javascript正则匹配汉字、数字、字母、下划线
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 正则表达式之特殊字符匹配
- 关于php正则匹配汉字的方法介绍
- java中使用正则表达式匹配特殊字符串
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- javascript的正则匹配方法学习
- javascript验证汉字,字符,等正则表达式
- JavaScript之基础-10 JavaScript 正则表达式(概述、定义正则、RegExp对象、用于模式匹配的String方法)
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- 当Split方法遇到特殊字符
- SQL SERVER 重组含有特殊字符的索引时遇到“关键字 'with' 附近有语法错误.”
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符