php用正则判断是否为数字的方法


Posted in PHP onMarch 25, 2016

前两天朋友的一个网站上有人利用php注入提交flash游戏分数,后来找原因才发现是有一位参数没有做数字判断导致。

本来保存游戏分数是 game.php?ac=save&fgid=1这个形式来实现,在php网页里面fgid直接调用,没有做任何的过滤。很多人利用在fgid=1后面加一个字母(fgid=1a),来实现一些非法操作。

假如  gamlist table 里面有一个游戏  fgid为102
select gname from gamelist where fgid='102′;
select gname from gamelist where fgid='102a';
这样都可以成功的找到游戏名字gname,这就给很多人提供了可乘之机

建议大家对关键的参数必须做过滤。如数字正则过滤

<?php
$fgid="123";
if(preg_match("/^\d*$/",$fgid))  echo('是数字');
else  echo('不是数字');

或者用函数

if(is_numeric($fgid)) echo('是数字');
else echo('不是数字');

网上用来判断id是否为数字的方法

$cid = empty($cid)? 1 : intval(preg_replace("/[^-\d]+[^\d]/",'', $cid));

这两种方法的区别是  is_numeric小数也会认为是数字,而前面正则会把小数点当作字符。

附一些常用的正则运算:

验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0)  ^\d+$
验证非正整数(负整数 + 0)  ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&‘,;=?$\” 等字符:[^%&‘,;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:?正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$    正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数   ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数  ^(-?\d+)(\.\d+)?

补充一下:

bool is_numeric ( mixed $var )
如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。

For example 1:

<?php
  $v = is_numeric ('58635272821786587286382824657568871098287278276543219876543') ? true : false;
  
  var_dump ($v);
?>

The above script will output:

bool(true)

For example 2:

<?php
$str="0";
$strTest=is_numeric(0);
var_dump($strTest);
?>

boolean true 

is_bool();//判断是否为布尔型
is_float(); //判断是否为浮点型
is_int(); //判断是否为整型
is_numeric(); //判断是否为数值型
is_string(); //判断是否为字符串
is_array(); //判断是否为数组
is_object(); //判断是否为对象

function int_str($str){
  if(is_numeric($str)){
    $str = 'm'.$str;
  }
  return $str;
}

我们用intval来判断用户输入的信息是否为数字,这个可以自动转换成数字,如果是0,返回的值也是假的,在php判断用户输入的是否为数字型或是否为数字型字符串,我们会用到is_numeric与intval函数来处理.实例代码如下:

$num = 1; 
$num1 ='1'; 
$str ='abc'; 
if( is_numeric( $num ) ) 
{ 
  echo $num.'是数字型'; 
} 
//1是数字型 
if( is_numeric( $num1) ) 
{ 
  echo $num1.'是数字型'; 
} 
else
{ 
  echo $num1.'不是数字型'; 
}

//1是数字型

第二个实例为看还是数字型呢,这要看php是那类型的语言了,关键是php是弱语言型,所以就会自动把数字型字符转换成数字了,实例代码如下:

if( intval( $str ) ) 
{ 
  echo $str.'是数字'; 
} 
else
{ 
  echo $str.'不是数字'; 
} 
//acd不是数字 
if( intval( $num1 ) ) 
{ 
  echo $num1.'是数字'; 
} 
else
{ 
  echo $num1.'不是数字'; 
} 
//1是数字

这篇文章就介绍到这了,需要的朋友可以参考一下。

PHP 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
PHP日期时间函数的高级应用技巧
May 16 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php页面缓存方法小结
Jan 10 PHP
PHP计算加权平均数的方法
Jul 16 PHP
PHP文件缓存类实现代码
Oct 26 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
PHP反射学习入门示例
Jun 14 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 #PHP
PHP程序员的技术成长规划
Mar 25 #PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 #PHP
PHP 生成微信红包代码简单
Mar 25 #PHP
PHP实现动态执行代码的方法
Mar 25 #PHP
PHP动态生成指定大小随机图片的方法
Mar 25 #PHP
PHP5.2中PDO的简单使用方法
Mar 25 #PHP
You might like
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
php实现搜索类封装示例
2016/03/31 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
浅谈php调用python文件
2019/03/29 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
jquery 学习笔记一
2010/04/07 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
python使用turtle库绘制树
2018/06/25 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
人事部主管岗位职责
2013/12/26 职场文书
开会迟到检讨书
2014/02/03 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
初中家长寄语
2014/04/02 职场文书
python基础之类属性和实例属性
2021/10/24 Python
解决xampp安装后Apache无法启动
2022/03/21 Servers
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL