Bladeren bron

mongodb特殊字符查询修改

weiwenhai 6 jaren geleden
bovenliggende
commit
d8c8ed03ba

+ 17 - 0
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/CommonUtils.java

@@ -802,4 +802,21 @@ public final class CommonUtils {
         return document.text();
     }
 
+    /**
+     * 正则表达是匹配特殊字符进行转义
+     * @param keyword
+     * @return
+     */
+    public static String escapeExprSpecialWord(String keyword){
+    	if (StringUtils.isNotBlank(keyword)) {
+    		String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
+    		for (String key : fbsArr) {
+    			if (keyword.contains(key)) {
+    				keyword = keyword.replace(key, "\\" + key);
+    				return keyword;
+    			}
+    		}
+    	}
+    	return keyword;
+    }
 }

+ 4 - 2
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperStructService.java

@@ -60,10 +60,12 @@ public class PaperStructService {
         query.addCriteria(Criteria.where("orgId").is(searchInfo.getOrgId()));
         query.addCriteria(Criteria.where("type").is(searchInfo.getType()));
         if(StringUtils.isNotBlank(searchInfo.getName())){
-        	query.addCriteria(Criteria.where("name").regex(".*?" +searchInfo.getName() + ".*"));
+        	String paperStructName = CommonUtils.escapeExprSpecialWord(searchInfo.getName());
+        	query.addCriteria(Criteria.where("name").regex(".*?" + paperStructName + ".*"));
         }
         if(StringUtils.isNotBlank(searchInfo.getCreator())){
-        	query.addCriteria(Criteria.where("creator").regex(".*?" +searchInfo.getCreator() + ".*"));
+        	String userName = CommonUtils.escapeExprSpecialWord(searchInfo.getCreator());
+        	query.addCriteria(Criteria.where("creator").regex(".*?" + userName + ".*"));
         }
         //判断试卷结构
         if(searchInfo.getType().equals("EXACT")){

+ 4 - 2
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -197,7 +197,8 @@ public class PaperServiceImpl implements PaperService{
         	query.addCriteria(Criteria.where("course.level").is(paperSearchInfo.getLevel()));
         }
         if(StringUtils.isNoneBlank(paperSearchInfo.getName())){
-        	query.addCriteria(Criteria.where("name").regex(".*?\\.*" +paperSearchInfo.getName() + ".*"));
+        	String paperName = CommonUtils.escapeExprSpecialWord(paperSearchInfo.getName());
+        	query.addCriteria(Criteria.where("name").regex(".*?\\.*" + paperName + ".*"));
         }
         long count = this.mongoTemplate.count(query, Paper.class);
         query.with(new Sort(new Order(Direction.DESC,"createTime")));
@@ -331,7 +332,8 @@ public class PaperServiceImpl implements PaperService{
         	query.addCriteria(Criteria.where("course.code").is(paperSearchInfo.getCourseNo()));
         }
         if(StringUtils.isNoneBlank(paperSearchInfo.getName())){
-        	query.addCriteria(Criteria.where("name").regex(".*?\\.*" +paperSearchInfo.getName() + ".*"));
+        	String paperName = CommonUtils.escapeExprSpecialWord(paperSearchInfo.getName());
+        	query.addCriteria(Criteria.where("name").regex(".*?\\.*" + paperName + ".*"));
         }
         if(StringUtils.isNotBlank(paperSearchInfo.getLevel())){
         	query.addCriteria(Criteria.where("course.level").is(paperSearchInfo.getLevel()));