需要知道这个正则表达式的作用,是否安全?

时间:2012-03-09 16:52:32

标签: php regex preg-match

更新别人的旧PHP项目,我对正则表达式不熟悉。

问题一是:这是做什么的?

preg_match('/^[0-9]+[.]?[0-9]*$/', $variable)

问题二是:这是否是一个安全的过滤器,用于插入没有mysql_real_escape_string()的mysql数据库?我知道答案是概率不,但只有当这个正则表达式没有通过时才设置为使用mysql_real_escape_string()。

感谢。

7 个答案:

答案 0 :(得分:5)

^      // start of string
[0-9]+ // one or more numbers (could also be \d+)
[.]?   // zero or one period (could also be \.?)
[0-9]* // zero or more numbers (could also be \d*)
$      //end of string

因此,它确保输入是一个数字,例如123.652.也将匹配)。它不会与.3512a6匹配。

DB插入似乎足够安全,因为它只允许数字。

答案 1 :(得分:1)

它匹配以下字符串:

  1. 从0-9
  2. 开始至少1位数字
  3. 在前n位数0或1时后有一个小数点
  4. 在char 0或更多次之后有任何数字

答案 2 :(得分:1)

它不会清理数据库的字符串。

检查$variable是否符合此模式......

  1. 以一个或多个数字(^[0-9]+
  2. 开头
  3. 后跟可选的.[.]?
  4. 后跟多个或几个数字([0-9]*
  5. 后跟字符串结尾($

答案 3 :(得分:0)

它试图匹配一个十进制数字(尽管很差)。它无论如何都不会修改$variable,所以在传递给MySQL之前你需要正确地转义它。

答案 4 :(得分:0)

这将匹配小数点前至少有一位数的数字(如果有小数点)。如果该值与此正则表达式匹配,我看不出将它插入数据库是否不安全。

答案 5 :(得分:0)

查看完全匹配。 它匹配 234234232432343.231313132321 和 2232233223 和 322332。 并不是 0.32232 而不是

答案 6 :(得分:0)

  

这是一个安全的过滤器,可以在没有mysql_real_escape_string()的情况下插入mysql数据库吗?

假设可能使用这个变量,我会说mysql_real_escape_string()对它来说是没用的。
虽然需要查询汇编代码。