玖叶教程网

前端编程开发入门

mysql简体、繁体、简体混合搜索方案

需求:搜索条件支持用户输入简体或者繁体或者简体繁体混合,同时数据库中字段存储也存在 简体、繁体、简体繁体混合。

解决方案采用如下sql语句

SELECT * FROM table WHERE field REGEXP '[关键词|關鍵詞]';

能搜索出

        关键词
        關鍵詞
        關鍵词

原理

正则表达式中的 "|" 表示或的意思,所以:
"關鍵詞|关键词"
表示匹配字符串为 "關鍵詞" 或 "关键词"。
当字段值为"關鍵词"时,它既包含了"關鍵詞"也包含了"关键词"。
所以使用这个正则表达式可以匹配包含简体和繁体混合的字段值。
具体原理是:
"關鍵詞" 可以完全匹配 "關鍵詞"
"关键词" 可以部分匹配 "關鍵词" 的 "词"
根据正则表达式的匹配规则,只要有一种匹配形式成功,就算整体匹配成功
所以 "關鍵詞" 既可以完全匹配 "關鍵詞",也可以部分匹配 "关键词",因此整个表达式可以匹配混合简繁体的字段
综上,通过构建交叉的简繁体正则模式,利用正则表达式的匹配规则,可以实现对应混合简繁体字段的值进行匹配。

正则还可以继续使用其他写法

.:匹配任意单个字符。
^:匹配字符串的开头。
$:匹配字符串的结尾。
*:匹配前一个字符零次或多次。
+:匹配前一个字符一次或多次。
?:匹配前一个字符零次或一次。
[]:匹配括号内的任意一个字符。
[^]:匹配不在括号内的任意一个字符。
():捕获子模式。
|:用于逻辑或操作符。

默认情况下,REGEXP是区分大小写的。如果需要进行不区分大小写的匹配,可以使用REGEXP BINARY

SELECT column_name
FROM table_name
WHERE column_name REGEXP BINARY 'pattern';

注意安全性:

在使用 REGEXP 时,要注意防止正则表达式注入攻击。类似于 SQL 注入攻击,正则表达式注入攻击可能会导致安全漏洞。要避免这种情况,建议对输入的数据进行严格的验证和过滤,确保只有可信的数据才被用于构建正则表达式。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言