php - 我的 preg_match 语法有效吗?

标签 php regex preg-match

我正在向数据库抽象层添加一个 if 语句,以挑选出对少数数据库表进行的任何尝试查询。

基本上,如果我的应用程序尝试从名为 membersmembers_profiles 的数据库表中创建、读取或销毁数据,我想调用我的 if声明。

if (
    preg_match('/INSERT INTO [members|members_profiles]/', $sql) ||
    preg_match('/UPDATE [members|members_profiles]/', $sql) ||
    preg_match('/DELETE FROM [members|members_profiles]/', $sql))
{
    // do if statement stuff here...
}

我不是正则表达式/preg-match高手,但是如果SQL查询匹配,上面的if语句会返回true吗:

  • 插入成员...插入成员_个人资料...
  • 更新成员...更新member_profiles ...
  • 从成员中删除...从members_profiles中删除...

或者我的 preg-match 语法是否有问题?

最佳答案

语法有效,但不会执行您想要的操作。

要交替模式,请使用

preg_match('/INSERT INTO (?:members|members_profiles)/', $sql) ||
//                       ^^^                        ^
<小时/>

在PCRE中,[…]定义了一个字符类。这将匹配 1 个字符,因为它出现在括号内。在您的情况下,如果 [members|members_profiles]bef 之一,则它会匹配 1 个字符, i, l, m, o, p, r s|_

分组是使用另一种括号(?:…)来完成的。

<小时/>

(顺便说一句,请不要使用正则表达式来检测数据库更改尝试。而是限制数据库用户的权限。)

关于php - 我的 preg_match 语法有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246239/

相关文章:

c# - 无法使用正则表达式在双引号之间提取字符串

PHP - 需要正则表达式帮助

javascript - Jquery Post 无法正常工作?

php - 如何在自定义帖子类型的自定义元框的 WordPress 中添加过滤器?

php - Mysql事务: Effect on other Transaction query

php - 如何从 HTML 表单中获取 PHP 值?

javascript - 正则表达式捕获连续的单词

使用 Java 的正则表达式在行尾的括号内分割文本

php - 允许空格、unicode 字母、数字、下划线、破折号和逗号吗?

PHP-预匹配?