Javascript正则表达式验证收到的MySQL全文搜索搜索字符串

时间:2016-04-14 13:08:51

标签: javascript mysql regex 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上测试正则表达式:https://regex101.com/r/lA3vG4/4

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

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

EDIT2:更新MyISAM FULLTEXT的保留字符。再次感谢Rick James。

1 个答案:

答案 0 :(得分:0)

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