PHP判断网址是否合法的正则表达式

 更新时间:2016年11月25日 15:54  点击:2058

//一

'/^https教程//?.+.[a-z]{2,4}$/';

//

'/^https//?.+.[a-z]{2,4}/.*$/';

//

'/^https?://.+.[a-z]{2,4}/.*$/';

//

'/^https?://.+.[a-z]{2,4}(/.*|)$/i'

//
/^http(s)?://([a-za-z0-9.]?([0-9a-za-z][0-9a-za-z-]+.)+[a-za-z]{2,5})|((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9]))/

//
filter_var($url, filter_validate_url)

 

 代码如下 复制代码

function getsourcecode($q){
 
 return @file_get_contents($q);

}
//用curl获取网站源文件
function c_getpagecode($c_url,$p_i=0){
 $user_agent = "mozilla/4.0";
 $proxy[0] = "http://211.155.231.208:80"; //浙江省杭州市 电信idc机房
 $proxy[1] = "http://210.51.10.197:8888"; //北京市 通泰大厦网通idc机房
 $ch = curl_init();
 curl_setopt ($ch, curlopt_proxy, $proxy[$p_i]);
 curl_setopt ($ch, curlopt_url, $c_url);
 curl_setopt ($ch, curlopt_useragent, $user_agent);
 //curl_setopt ($ch, curlopt_cookiejar, "c:cookie.txt");
 curl_setopt ($ch, curlopt_header, 0);
 curl_setopt ($ch, curlopt_returntransfer, 1);
 curl_setopt ($ch, curlopt_followlocation, 1);
 curl_setopt ($ch, curlopt_timeout, 120);
 $result = curl_exec ($ch);
 curl_close($ch);
 return $result;
}

//实例应用

 代码如下 复制代码
$url ='http://mb.111cn.net';
//$body = getsourcecode( $url);


//echo $body; //就把mb.111cn.net内容全部采集到了本地

//再来看一下用curl获取网站源码文件函数实例
echo c_getpagecode($url);

经典php教程分页代码与分页原理
1、前言

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

2、原理

所谓分页显示,也就是将数据库教程中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页多少条记录($pagesize)?
当前是第几页($currentpageid)?

现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
至于其他的参数,比如:上一页($previouspageid)、下一页($nextpageid)、总页数($numpages)等等,都可以根据前边这几个东西得到。
以mysql教程数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
……

这一组sql语句其实就是当$pagesize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($currentpageid - 1) * $pagesize, $pagesize

拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

3、简单代码
请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

<?php
// 建立数据库连接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
   or die("could not connect: " . mysql_error());
// 获取当前页数
if( isset($_get['page']) ){
  $page = intval( $_get['page'] );
}
else{
  $page = 1;
}
// 每页数量
$pagesize = 10;
// 获取总数据量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 记算总共有多少页
if( $amount ){
  if( $amount < $page_size ){ $page_count = 1; }        //如果总数据量小于$pagesize,那么只有一页
  if( $amount % $page_size ){                 //取总数据量除以每页数的余数
    $page_count = (int)($amount / $page_size) + 1;      //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
  }else{
    $page_count = $amount / $page_size;           //如果没有余数,则页数等于总数据量除以每页数的结果
  }
}
else{
  $page_count = 0;
}

// 翻页链接
$page_string = '';
if( $page == 1 ){
  $page_string .= '第一页|上一页|';
}
else{
  $page_string .= '<a href="/?page=1>";第一页</a>|<a href="/?page='."($page-1).'>上一页</a>|';
}
if( ($page == $page_count) || ($page_count == 0) ){
  $page_string .= '下一页|尾页';
}
else{
  $page_string .= '<a href="/?page='."($page+1).'>下一页</a>|<a href="/?page='."$page_count.'>尾页</a>';
}
// 获取数据,以二维数组格式返回结果
if( $amount ){
  $sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
  $result = mysql_query($sql);
 
  while ( $row = mysql_fetch_row($result) ){
    $rowset[] = $row;
  }
}else{
  $rowset = array();
}
// 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果
?>


4、oo风格代码
以下代码中的数据库连接是使用的pear db类进行处理

<?php
// filename: pager.class.php
// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
class pager
{
  var $pagesize;       //每页的数量
  var $currentpageid;    //当前的页数
  var $nextpageid;      //下一页
  var $previouspageid;    //上一页
  var $numpages;       //总页数
  var $numitems;       //总记录数
  var $isfirstpage;     //是否第一页
  var $islastpage;      //是否最后一页
  var $sql;         //sql查询语句
 
 function pager($option)
  {
    global $db;
    $this->_setoptions($option);
    // 总条数
    if ( !isset($this->numitems) )
    {
      $res = $db->query($this->sql);
      $this->numitems = $res->numrows();
    }
    // 总页数
    if ( $this->numitems > 0 )
    {
      if ( $this->numitems < $this->pagesize ){ $this->numpages = 1; }
      if ( $this->numitems % $this->pagesize )
      {
        $this->numpages= (int)($this->numitems / $this->pagesize) + 1;
      }
      else
      {
        $this->numpages = $this->numitems / $this->pagesize;
      }
    }
    else
    {
      $this->numpages = 0;
    }

function _pageft($totle, $displaypg = 20, $url = '') {

  global $page, $firstcount, $pagenav, $_server;

  $globals["displaypg"] = $displaypg;

  if (!$page)
   $page = 1;
  if (!$url) {
   $url = $_server["request_uri"];
  }

  //url分析:
  $parse_url = parse_url($url);
  $url_query = $parse_url["query"]; //单独取出url的查询字串
  if ($url_query) {
   $url_query = ereg_replace("(^|&)page=$page", "", $url_query);
   $url = str_replace($parse_url["query"], $url_query, $url);
   if ($url_query)
    $url .= "&page";
   else
    $url .= "page";
  } else {
   $url .= "?page";
  }
  $lastpg = ceil($totle / $displaypg); //最后页,也是总页数
  $page = min($lastpg, $page);
  $prepg = $page -1; //上一页
  $nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
  $firstcount = ($page -1) * $displaypg;

  //开始分页导航条代码:
  $pagenav = "显示第 <b>" . ($totle ? ($firstcount +1) : 0) . "</b>-<b>" . min($firstcount + $displaypg, $totle) . "</b> 条记录,共 $totle 条记录";

 

 代码如下 复制代码

include("../admin/inc/inc.php");
 $times = time();
 $filename = $times.".csv"; 
 $a = "联系人,联系电话,小区,所需材料,备注,申请时间 "; 
 $days = postget("days"); 
 $mktime = daystomktime($days);
 $sql = "select * from  tugou where ($times-times)<$mktime";
 $db = new db();
 $result = $db->query( $sql );
 $rs = $db->fetch($result,0);
   foreach($rs as $v=>$vv)
   {  
     $a.=$vv['name'].','. $vv['mo'].",". $vv['comm'].",".

commbox($vv['cbox']).",";
     $a.="".$vv['bak'].",". date('y-m-d',$vv['times'])."

";  
   }
  //echo $a;
  $hod = fopen ($filename,"w+");
  if( fwrite($hod,$a) )
  {
   echo "生成文件成功,点击<a href=$filename target=_blank>下载excel

文档</a>";
  }
 
 

function daystomktime($days)
{
 switch( $days )
 {
  case 1:
   $t = 86400;
   break;
  case 7:
   $t = 86400*7;
   break;
  case 30:
   $t = 86400*30;
   break;
  case 90:
   $t = 86400*90;
   break;
  case 2048:
   $t = 86400*2048;
   break;
 }
 return $t;
}

function commbox( $ars )
 {
  if( trim( $ars ) == '' )
  {
   return '&nbsp;';
  }
 
  $array = include("tugou.php");
  $tmp = explode(',',$ars);
  $str ='';
  if( $tmp )
  {
   foreach( $tmp as $c )
   {
   $str .= $array[intval($c)].'|';
   }
  }
  return $str;
 }
 

/*
 结构
 create table if not exists `tugou` (
  `id` int(8) not null auto_increment,
  `name` varchar(20) default null comment '名字',
  `mo` varchar(20) default null comment '手机',
  `comm` varchar(100) default null,
  `bak` varchar(500) default null comment '备份',
  `cbox` varchar(500) default null comment '类型',
  `times` int(4) default null,
  `ip` varchar(20) default null,
  primary key  (`id`)
) engine=innodb  default charset=utf8 auto_increment=8 ;

[!--infotagslink--]

相关文章

  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • 常用C#正则表达式汇总介绍

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • js正则学习小记之匹配字符串字面量

    关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
  • C# 中使用正则表达式匹配字符的含义

    正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • Python验证的50个常见正则表达式

    这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06