检查URL是否在所选链接上包含字母和符号

时间:2018-02-12 13:21:16

标签: php preg-match

我想拒绝当前页面和所选网址的字母和符号

我只想要数字

if(@$_GET['page'] == '$string') {

if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $string))
{

die("error : page url found letters and symbols");
}
}

例如xxx.com/index.php?page=&lt; ----我只想要数字

因为有些人放了字母和符号 像这样 xxx.com/index.php?page=ABCD xxx.com/index.php?page =!@#$

我不希望这种情况发生,因为我想保护我的网站免受sql注入

如何拒绝所选网址中的字母和符号:index.php?page = ?

3 个答案:

答案 0 :(得分:1)

始终使用preg_match函数,因为is_numeric会测试值是否为数字。它不一定必须是整数 - 它可以是十进制数字或科学记数法中的数字。

  $pageNumber = $_GET['page'];
  if(preg_match('/^[1-9][0-9]{0,10}$/',$pageNumber))
    {
      echo "Page is number";
    }
  else
    {
      echo "Page is not a number";
    }

如果您使用$_GET进行分页

,也不允许超过10位数
/^[1-9][0-9]{0,10}$/
  

这将允许字符串长度在1到10位之间(即第一个数字加上0-10个其他数字)。您可以根据自己的需要随意调整花括号中的数字。如果你想要一个固定长度的字符串,那么你只需要在括号中指定一个数字。

答案 1 :(得分:0)

is_numeric()将检查参数是否为数字(Docs)。像这样使用它:

if (!is_numeric($_GET['page'])) {
    die('is not an integer');
}

答案 2 :(得分:0)

清理int值的最简单方法是将其强制转换为int(不要向用户显示错误):

$_GET['page'] = intval($_GET['page']);

但如果您确实需要检查并且确实需要使用正则表达式,请检查[^0-9]之类的内容,它代表任何不能成为自然数字的字符。

如果没有正则表达式,您可以查看is_numeric()