Php preg_比赛是唯一的防线吗?

Php preg_比赛是唯一的防线吗?,php,regex,preg-match,defensive-programming,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; }

我想知道,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;
   }
}
所以我的问题是,preg_match()是否可以成为唯一的防线,而不使用htmlentities()或filter_var(),因为它不接受任何内容,或者我遗漏了什么

*编辑* 我创建了以下代码来测试它:
是的。不过,最好不要完全依赖它,因为对正则表达式稍加修改可能会使您容易受到攻击。使用正确的转义函数是理想的,因为即使验证代码更改,您的清除代码也不会更改。

取决于您正在执行的操作。如果您使用的是真名,则需要接受
和一些其他非字母字符,在这一点上,如果按特定顺序使用,则可以进行SQL注入。孩子们,请始终使用适当的保护措施!:p@SmokeyPHP在巴西,我们不使用
,因此在我的代码中,它接受常见字符
á、é、ç以及其他可能出现的字符。如果有一些不寻常的字符,这个人可能知道他/她的名字是不寻常的。
edit
上的代码检查了一些随机字符,并且不接受恶意代码。@SmokeyHP但考虑在其上插入
是个好主意。您是说更改
$regex
?是否只有我或其他使用XSS或类似的人才能更改它?如果您决定允许使用撇号,您可以更改它。或者,如果其他人在您的项目上工作,其他开发人员可能会这样做。