Javascript正则表达式,用于验证接收到的MySQL全文搜索的搜索字符串
Javascript regex to validate received search string for MySQL full-text search
我需要验证用于MySQL数据库全文搜索(布尔模式)的输入搜索字符串是否有效。
最小字长(ft_min_word_len)已设置为"2",并且只允许使用以下运算符:+,-,",*,(,)
给出了以下验证规则:
- 它可能包含几个用空格分隔的有效单词
- 有效单词至少包含两个与以下字符集匹配的字符:
[^+'s'-'>'<'(')'~'*':'"'&'|]
- 没有空格,没有星号,没有括号,没有加号,没有减号,没有双引号
- 单词可以有前导加号或前导减号
- 单词后面可能有一个星号
- 短语可以用双引号括起来
- 用双引号括起来的加号和减号不会被解释为运算符
- 所附短语可以有前导加号或前导减号
- 单词可以用括号括起来
- 带括号的单词不能有任何前导运算符
- 左括号可以有前导加号或前导减号
必须通过正则表达式的有效搜索字符串示例:
'word1 word2 word3 word4 word5'
'+word1 +word2 word3 word4 -word5'
'+word1 +"word2 word3 word4" -word5'
'+word1 +"word2+word3 word4" -word5'
'+word1 +"word2*word3 word4" -word5'
'+word1 +(word2 word3 word4) -word5'
'+word1 +(word2 word3* word4*) -word5'
不能通过正则表达式的无效搜索字符串示例:
'w word2 word3 word4 word5'
'wo*rd2 wo+rd3 wor(d)4 "word5'
'word1+ word2+ word3 word4 -word5'
'+word1 +"word2 word3 word4 -word5'
'+word1 +(word2 word3 word4 -word5'
'+word1 +(+word2 -word3 -word4) -word5'
我创建了一个正则表达式,它运行得很好,但它很长,而且单词的正则表达式被多次使用,因为单词可能被引号或括号括起来:
/^((?:[+'-]?(?:(?:[^+'s'-'>'<'(')'~'*':'"'&'|]{2,}'*?|(?:"(?:[^"'s]{2,}[ ]*)+"))|'((?:(?:[^+'s'-'>'<'(')'~'*':'"'&'|]{2,}'*?|(?:"(?:[^"'s]{2,}[ ]*)+"))[ ]*)+'))(?:[ ]+|$))+)$/
您可以在regex101.com上测试regex:https://regex101.com/r/lA3vG4/4
我不是正则表达式专家,所以我想知道,是否有一个更简单的正则表达式适用于Javascript。
EDIT:将单个空白字符替换为''s,感谢Rick James的提示
EDIT2:更新MyISAM FULLTEXT的保留字符。再次感谢里克·詹姆斯
考虑通过用[[:space:]]
替换空白测试来简化。(我不知道Javascript是否理解这种表示法。)
相关文章:
- 如何从谷歌自定义搜索下载搜索结果
- 数据表 + 列搜索 + 整体搜索协同工作 + 服务器端处理
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- 我是否阅读了搜索查询中的所有推文
- Javascript正则表达式,用于验证接收到的MySQL全文搜索的搜索字符串
- 如何存储推特搜索API推文并转发它们
- 如何解决区分大小写搜索的搜索输入问题
- 在文档中搜索文本以删除的文本超过找到它的标签
- 来自用户的推特 API 高级搜索推文
- 如何使用 html 表单中的一个文本字段来搜索数据库表中的任何列
- 使用 Ember.js 构建搜索框搜索
- 搜索与搜索和替换
- 搜索文档并查找所有带有标题的输入
- 谷歌网站搜索捕获搜索提交和触发功能
- 谷歌地图API地点搜索获取搜索结果的数量
- 搜索.$也搜索id
- 使用list.js(搜索函数)搜索HTML表-修改以显示所有不包括搜索词的行
- ElasticSearch和不可预测的搜索文档
- 使用ajax调用进行搜索框搜索的自动建议
- 通过循环访问数组来搜索文档中的关键字