preg_match可以成为唯一的防线吗?

时间:2014-03-27 16:00:44

标签: php regex preg-match defensive-programming

我想知道,如果preg_match()可以用作PHP的唯一防线。

测试preg_match(),至少对于一个简单的输入表单字段,它只接受正则表达式可接受的内容,并为其他所有内容返回false:

对于数字:

function GetUserID($userid) {
   $regexnum = "/^[0-9]+$/";
   if(preg_match($regexnum, $userid) != 1 OR empty($userid)) {
      return false;
   }
   else {
      return $userid;
   }
}

姓名:

function GetUsername ($user) {
   $regex = "/^[a-zA-Zà-ûÀ-ÛçÇ\s]+$/";
   if (preg_match($regex, $user) != 1 OR empty($user)) {
      return false;
   }
   else {
      return $user;
   }
}

所以我的问题是,如果不使用htmlentities()或filter_var(),preg_match()是唯一的防线,因为它不接受任何其他内容或者我错过了什么?

*编辑* 我已经创建了这个代码来测试它: Test Site

1 个答案:

答案 0 :(得分:0)

是。 然而不要完全依赖它是一个好主意,因为正则表达式的轻微改变可能会让你变得脆弱。使用正确的转义函数是理想的,因为即使验证代码发生变化,您的卫生处理代码也不会。