2011-05-17 70 views
2

我有一个MYSQL类,我想安全地防止SQL注入,所以我想到了一个检查算法。例如:正则表达式的问题 - 搜索:特定模式不加引号

query("SELECT * FROM xyz WHERE id = @1 AND name = '@2' AND pwd = '@3' AND somenumber = @4", param1, param2, param3, param4) 

这个正则表达式必须匹配@ 1和@ 4,所以第一个和第四个参数应该是整数。

我尝试这样做:

[^'"]@\d+[^'"] 

但它不匹配:

@1,@4,@5 

什么能正确的表达?

预先感谢您。

回答

1

如果你想@ 123,而不是 “@ 123”,使用

(?<!["'])@\d+(?!['"]) 

您正则表达式的作用:

  • [^'"]匹配一个«什么,但 字符串“”»
  • @\d+匹配符号和 尽可能多的数字
  • [^'"] matche s' 但是字符串'“»

因此它会匹配d @ 12),@@ 0 @,k @ 09。 ...