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和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
分享PHP header函数使用教程
Sep 05 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
两个php日期控制类实例
Dec 09 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
鼠标图片振动代码
2006/07/06 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
js实现文字列表无缝滚动效果
2017/06/23 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
PyQT实现多窗口切换
2018/04/20 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
python支持多继承吗
2020/06/19 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Java基础知识面试要点
2016/07/29 面试题
Linux上比较文件的命令都有哪些
2012/02/24 面试题
英语硕士生求职简历的自我评价
2013/10/15 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
公务员转正考察材料
2014/02/07 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
大学生自荐信范文
2015/03/05 职场文书
2015年清明节网上祭英烈活动总结
2015/03/26 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL