gpt4 book ai didi

JavaScript 正则表达式用于验证接收到的 MySQL 全文搜索搜索字符串

转载 作者:行者123 更新时间:2023-11-29 21:08:15 24 4
gpt4 key购买 nike

我需要验证输入的用于 MySQL 数据库全文搜索( bool 模式)的搜索字符串是否有效。

最小字长 (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 上测试正则表达式:https://regex101.com/r/lA3vG4/4

我不是正则表达式专家,所以我想知道是否有更简单的正则表达式适用于 Javascript。

编辑:用\s 替换单个空白字符,感谢 Rick James 的提示

EDIT2:更新 MyISAM FULLTEXT 的保留字符。再次感谢里克·詹姆斯。

最佳答案

考虑通过用 [[:space:]] 替换空白测试来简化。 (我不知道 Javascript 是否理解该表示法。)

关于JavaScript 正则表达式用于验证接收到的 MySQL 全文搜索搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36624123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com