我在项目中有一个文本框,用户可以在其中编写数据库查询,但我希望阻止DELETE
,DROP
或使用评论(/* */
,{{1 }}或分号--
。
我正在使用以下的RegExp来检查查询。它必须只计算有效的数据。
;
RegExp工作正常,但它也没有匹配换行符和回车符(/^(?!.*\-\-)(?!.*\/\*)(?!.*\*\/)(?!.*;)(?!.*CREATE)(?!.*DROP)(?!.*ALTER)(?!.*UPDATE)(?!.*DELETE).*$/
,\n
),这应该是有效的。
如何更新RegExp以允许\r
和\n
?
答案 0 :(得分:0)
@FabSa给了我答案。
诀窍就是设置PCRE_DOTALL
flag,因为我正在使用PHP _ preg_match()
。这确实使得点(.
)元字符匹配所有字符,包括换行符(\n
)。
所以,最终的正则表达式如下:
/^(?!.*\-\-)(?!.*\/\*)(?!.*\*\/)(?!.*;)(?!.*CREATE)(?!.*DROP)(?!.*ALTER)(?!.*UPDATE)(?!.*DELETE).*$/s