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下使用SimpleXML 处理XML 文件
Feb 27 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
php模板函数 正则实现代码
Oct 15 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PDO::inTransaction讲解
Jan 28 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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 tp验证表单与自动填充函数代码
2012/02/22 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
一个JavaScript继承的实现
2006/10/24 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
原生JS实现天气预报
2020/06/16 Javascript
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
wxpython实现图书管理系统
2018/03/12 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
Python 复平面绘图实例
2019/11/21 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
docker 制作mysql镜像并自动安装
2022/05/20 Servers