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 相关文章推荐
php读取3389的脚本
May 06 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP操作MySQL事务实例
Nov 05 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
详解php中curl返回false的解决办法
Mar 18 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
PHP执行普通shell命令流程解析
Aug 24 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实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
定义php常量的详解
2013/06/09 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
超清晰的document对象详解
2007/02/27 Javascript
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
Django中template for如何使用方法
2021/01/31 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
介绍一下Ruby的特点
2013/01/20 面试题
前台领班岗位职责
2013/12/04 职场文书
检讨书模板
2015/01/29 职场文书
Python中如何处理常见报错
2022/01/18 Python
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle