如果用于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。
答案 0 :(得分:0)
考虑通过用[[:space:]]
替换空白测试来简化。 (我不知道Javascript是否理解该符号。)