开源界的一盏明灯!
Jul 22

apache的重写规则实例

分类:apache相关 | 给我留言 | 点击量10次

禁止访问重写文件

Apache

if(strpos($_SERVER['REQUEST_URI'],”exampleCode.”)){exit;}

IIS

if($_SERVER['HTTP_X_REWRITE_URL']==$_SERVER['SCRIPT_NAME']){exit;}

 

网站重写规则整理和实例

RewriteEngine On

RewriteBase /

 

一、用途:具体asp文件重写到具体的文件

规则:RewriteRule sample.asp$ sample.  

二、用途:404重定向

规则:errorDocument 404 /404.html

三、用途:example.com 301重定向到www.example.com

规则:RewriteCond %{HTTP_HOST} ^pass4sure.com

RewriteRule (.*) http://www.pass4sure.com/$1 [R=301,L]

 

四、用途:匹配所有字符

规则:RewriteRule examples/([^/]+)/$ example.?action=$1

五、用途:匹配5-12位的数字

       规则:RewriteRule numbers/(\d{5,12})/$ number.?number=$1

六、用途:匹配ip

       规则:RewriteRule ip_address/((\d{1,3}\.){3}\d{1,3})/$ ipaddress.?number=$1

七、用途:匹配除之外的字符

       规则:RewriteRule data_counter/[^x]{3,4}/$ ipaddress.?number=$1

 apache的重写规则和正则表达式大体上差不多,但还是有些差异的 如:[a c] 在apache的重写规则里面就会出现错误,导致网站不可访问,但是在正则里面表示匹配“a” ,“ ”, “c”里的任意一个字符串

Jul 18

MySQL5上创建视图的实例

分类:mysql相关 | 给我留言 | 点击量15次

一: 日电新闻建立视图

>CREATE VIEW VIEW_RDNEWS AS
SELECT SN_ID,SN_TITLE,SN_CONTENT,Owner,SN_STARTTIME
FROM table_sector_news
WHERE SN_SORT=’PZ’ ORDER BY SN_TOP,SN_STARTTIME desc ;
Query OK,o rows affected <0.00 sec>

二: SELECT * FROM VIEW_RDNEWS;

三: OK了

Jul 16

转《Facebook的成功秘诀是什么 - SNS》

分类:杂谈天地 | 给我留言 | 点击量31次

关键字: sns, facebook
SNS是2008年中国互联网最火爆的现象了,无数的SNS网站一夜之间纷纷涌现,前仆后继,慰为壮观:校内、海内、开心、一起、蚂蚁以及无数的Facebook克隆SNS网站陷入了一场空前惨烈的厮杀当中,每个人都生怕错过互联网下一个the big thing的机会,一波接一波的抄袭、炒做和竞争令人应接不暇、眼花缭乱。我也未能免俗,从2006年就一直关注SNS网站的发展,在2007年下半年就开始用Facebook,也一直在不断思索:究竟SNS网站的未来是什么呢?这场空前混乱的SNS大战会有什么样的结果呢?在中国,一个成功的SNS模式应该是什么样的呢?

一、引子

早在博客概念还如日中天的2005年,国内就已经有一大批克隆MySpace的SNS网站了,比方说uuzone,圈网等等,当2006年MySpace以5.8亿美元的高价被新闻集团收购之后,国内的Myspace克隆网站达到了一个高潮。但是这种类型的SNS网站模式在国内一直不太成功,难以病毒式传播,需要依靠大规模用户推广和不断的线下活动组织,所以逐渐式微了。除了已经关门的之外,其他的已经无一例外的改头换面克隆Facebook了。此时当其他网站还在盯着博客概念和MySpace的时候,王兴已经全盘克隆Facebook推出了校内网,眼光很独到。

但是直到2007年微软以2.4亿美元购买了Facebook的1.5%股份,这才真正引爆了国内的Facebook热潮,此前言必称MySpace的谢文也从此改口,言必称Facebook了。从2007到现在一年时间不到,国内的Facebook克隆SNS网站已经是忽如一夜VC来,千万SNS缤纷开了。这些众多的SNS网站当中,除了51.com和豆瓣之外,几乎无一例外的先后抄袭MySpace和Facebook,特别是从王兴开始,把抄袭发展到了毫无道德底线的程度:连按钮和CSS样式表都直接拿来就用,开创了互联网抄袭无底裤的新时代,从中国互联网的历史贡献来说,王兴可以和周鸿祎相提并论,都是划时代的开创者。

现在的SNS都长着一副Facebook的嘴脸,这真的十分无趣,国外的Web2.0网站类型非常丰富,光是SNS类型的还有twitter,friendfeed,friendster,ning等等,干吗光盯着Facebook抄阿?所以我的第一个话题是:

二、Facebook的成功秘诀是什么?

这几年时不时有人问我:JavaEye的成功秘诀是什么?也有很多人告诉我他们发现了JavaEye成功的秘密是XXX,在他们看来,只要按照这个XXX去做,也可以创办一个成功的技术网站,但我没有发现有人成功过:这不是因为他们找错了秘诀,而是因为网站的成功并不是光靠一个秘诀。

JavaEye的发展历史分为几个阶段:从2003年9月创立到2006年8月是第一个阶段,这个阶段的JavaEye靠的是个人铁腕管理;从2006年9月到2007年9月是第二个阶段,这个阶段的JavaEye靠的是web2.0概念的社区改造;从2007年10月开始是第三个阶段,这个阶段的JavaEye靠的是不断精益求精的功能和品质服务。以后JavaEye还会有很多发展阶段,跨越每个不同的发展阶段都需要独特的核心竞争力(或者说秘诀)。

现在国内克隆Facebook的一些SNS网站就犯了上面同样的问题:王兴认为Facebook的成功秘诀是发展大学生用户市场,所以他搞了校内网;当王兴卖掉校内创办海内的时候,他又认为Facebook的成功秘诀是真人社区,这一点也被谢文反复的吹捧;而戴志康显然认为Facebook的成功秘诀是去中心化的社区形态,所以他搞了一个UCenter Home出来;而从开心网开始,大家又突然发现Facebook的成功秘诀原来是上面的Web小游戏,于是一窝蜂的抄袭Facebook的热门小游戏;当然还有很多人认为Facebook的成功秘诀在于开放平台。所以不同的人看Facebook,会得出不同的结论,所谓:“横看成岭侧成峰,远近高低各不同”。

其实这些看法都对,但是又都不准确:Facebook在每个发展阶段都有导致他成功的原因:在Facebook发展的第一个阶段,面向校园市场和实名注册是他成功的原因;在Facebook发展的第二个阶段,采用去中心化的封闭式设计又能够很好的隔离不同类型的用户;在Facebook发展的第三个阶段,是开放平台推动了他的腾飞,是web小游戏让他的用户群迅速的扩大。因此就算要抄袭Facebook,也应该认识到Facebook成功的每个阶段,要抄就抄得全面点。

三、Facebook究竟是什么?

那么Facebook本质上是什么东西呢?现在的Facebook对用户来说是一个社交工具,而不是一个社区;如果我们抛开用户的身份,从互联网网站类型去看,Facebook是一个应用平台,而不是一个社区网站。因此目前国内的SNS网站当中,只有开心网最接近Facebook,只有开心和海内没有企图去成为一个社区网站,其他所有的SNS网站都背离了这一点。

我在2007年下半年,总是不断的收到一些朋友的Facebook邮件邀请,一开始不为所动,到后来开始不胜其扰,最后注册了一个账号。但是注册账号以后发现Facebook就是一个空白的网站,根本不知道可以干吗,于是又是长期的不登陆,直到一个朋友给我发来了Facebook上面的Vampire的app邀请,Vampire是一个吸血鬼的小游戏,你可以咬别人组建你的吸血鬼军队,还可以和别的军队作战。就这么一个小游戏,立马让我明白了Facebook是怎么个玩法,马上促使你把自己的MSN/Gtalk的朋友都拉过来玩,于是一个你熟识朋友的在线圈子很快就组成了。

现在很多的开心网用户看到上面这一段,肯定觉得似曾相识,他们就是这样开始用开心的,这里的互动关键点是什么呢?是作为一个网站,用户为什么会来你的网站?

因为你的网站有大牛?还是因为你的网站有高质量的文章和讨论?还是因为你的网站提供了很多吸引他的机会和资源?

如果用户是因为这样的理由来你的网站,那你抄袭Facebook就太失败了。因为你的网站核心竞争力还是在于“内容”,还是要依靠UGC。那么一个封闭的社区、一个去中心化隔离用户的社区要创造高质量的UGC就太难了。
Facebook靠的是你的朋友在上面活动,你可以参与他们的活动,这就是全部的理由。至于搞什么活动不重要,写不写什么文字也不重要,唯一重要的是你需要Facebook这样一个tool来保持和你朋友之间的关系。

虽然Facebook不仅仅限于认识的朋友,但是其主要目的就是提供给熟识的朋友进行交流之用,因此Facebook本身并不提供任何全站的公共信息广播,也不开放匿名访问,你和自己认识的朋友之间的交流本来就是私密性的,这些信息本来就是被保护起来的。

而且尤其重要的一点就是Facebook并不鼓励UGC(用户创造内容),这是和其他web2.0网站的本质区别。Facebook真正鼓励是你和你的朋友在Facebook上面“发生了互动的行为”,而不是“互动的所创造的内容”。

用这个标准你去衡量一下,就会发现开心网是唯一神似Facebook的网站,而其他网站,特别是UCenter Home简直就是拙劣的Facebook模仿者,他完全没有领会Facebook的本质,完全用自己做社区软件的思路去套Facebook,搞出来的UCHome压根就是一个社区网站,这一点大家看看5GSNS:

1、你为什么去5GSNS,因为你想看keso或者其他大牛写的文章
2、你为什么去5GSNS,因为你知道keso或者其他大牛现在在干吗
3、你为什么去5GSNS,因为上面有互联网行业的招聘信息

说白了就是一句话:高质量的内容和资源在吸引你,所以要保持高质量的内容和资源,你必须依靠高质量的会员持续的UGC,那么我请问你,这和一个BBS有本质区别吗?或者我这样问你,keso不用UCHome,而是discuz!,会妨碍你访问5GSNS吗?会妨碍你泡在这个网站上面并且发贴吗?所以小戴同学换汤不换药呀。

四、Facebook怎么赚钱?

据说Facebook现在全球注册会员有6000多万了吧,网站流量也排名全球前10了,这样的网站赚钱是不难的,难的是用简单的商业模式持续的赚大钱。无论是Facebook在网站上面搞搞电子商务卖卖商品也好,搞搞网络招聘卖卖人头也好,搞搞游戏卖卖道具也好,都能赚钱,但是这些商业模式有问题:

1、无论是电子商务、网络招聘、网络游戏或者其他的什么商业模式,都是划分具体的用户群体去赚特定人群的钱,无形之中,潜在客户就少了一大半,Facebook坐拥6000万会员,商业模式的覆盖面必须广,去赚小众的钱就是个失败的商业模式。

2、进入特定的分众领域,以Facebook这样的通用SNS网站来说,竞争力根本不及专业的垂直网站,你做电子商务做不过ebay,做网络招聘做不过monster,做网络游戏做不过爆雪,都只能吃点残羹冷炙。而且这种专业领域,你Facebook根本没有积累,你需要花多么大的代价才能摸清楚这里面的水有多深呀。

3、你做这些垂直领域的生意,其实就是和Facebook平台上面的开发商在抢生意,这是一个大忌,会破坏整个Facebook平台的商业生态链条。而这个大忌,校内网正在不遗余力的去犯。

那Facebook怎么办?靠广告吗?广告是一条路,但光靠广告不行。Facebook在2007年广告收入是1.45亿美元。这个收入水平和Yahoo这样的门户网站无法相提并论,也远远不足以盈利和上市。

其实在网络广告市场,已经被证明的广告模式只有两种:搜索引擎的关键字广告和媒体网站的媒体广告,也就是Google模式和Yahoo模式,或者说国内的百度模式和新浪模式。前者依靠拍卖广告关键字赚钱,后者依靠网络媒体内容平台传播影响力。

而Facebook的精准广告投放只能依靠CPC(每点击成本)来计费,而我们知道Google的adsense收入是非常可怜的,他的主要广告收入来自竞价排名。Facebook的非UGC特性决定了他是一个没有内容的网站,无法像媒体网站那样卖内容广告,作为一个对比,开放式的SNS网站MySpace就不同了,他的网站互动产生了巨大的UGC,所以他的广告收入是Facebook的3倍以上。因此光靠广告收入,对于Facebook来说非常的不够。

那么Facebook的钱途在哪里?

Facebook的真正钱途在于从app开发商身上赚钱!我们看看淘宝网是怎么赚钱的就知道了:淘宝网开店不收费,但是你想成为诚信商家,你想进驻淘宝商城,你想在淘宝的搜索上面靠前,你想获得淘宝的高级服务,那么请乖乖交钱。而淘宝上面的大商家是很愿意掏这笔钱的,因为淘宝这个平台可以让他赚到更多的钱。

Facebook现在就是一门心思做平台,不做应用,尽量能开放的数据全部开放出去,不遗余力的培养app开发商,为app开放商创造最好的赚钱途径。Facebook就是一个巨大的网店,而app开发商就是上面免费租赁店面的商家,兜售自己的玩具,吸引用户来玩。app开发商可以去做网络招聘、app开发商可以去做机票预定、app开发商可以去做电子商务,现在Facebook上面已经有几万个app了,其中真正赚钱的app还不是特别丰富。等到Facebook平台上面有100万个赚钱的app商家的时候,Facebook再面向app商家推出增值服务,你可以想像一下到时候Facebook赚钱是多么容易的事情。

所以Facebook并不需要直接从注册用户身上赚钱,而是把面向用户的细分垂直领域的赚钱机会统统留给app商家,同时也把这些细分领域的成本、风险和时间统统节省了,Facebook只要把自己的平台做的足够好,给app商家提供足够好的免费服务和增值服务,就可以坐在家里收钱了,压根不需要自己亲自一个细分领域一个细分领域辛苦的开拓。从这一点来看,校内是多么的愚蠢和短视。为什么现在Facebook这么全心全意的伺候app开发商,当然是因为app开发商将来就是Facebook的衣食父母呀。

Jul 12

C#中params联想到PHP中如何实现?

分类:php前沿 | 给我留言(2 条留言) | 点击量40次

外面下着雨在家没事干,所以想起来上次下的C#的教程上次看到第六章后没看,就找出来研究研究,看到C#中的params关键字的作用我忽然想起来中也能实现这样的功能,拿来和大家共享
Function
function SetSetting_base(){
 $numargs = func_num_args();

$numargs可以得到传入函数的参数个数
func_get_arg($i):可以调用索引为$i的参数

所以大家以后参数个数未知的情况下可以试用这种方法,参数个数比较多的时候也可以使用此方法。

Jul 12

网页设计审美需求

分类:网页制作 | 给我留言(1 条留言) | 点击量25次
网页设计审美需求网页把各种信息

以最快捷、方便的方式传达给受众。人们对美的追求是不断深入的,

href=”http://www.fededu.com/kecheng_display.asp?id=297″>网页设计同样如此。网页不光是把各

种东西放上去,能看就行,这是远远不够的!要考虑如何受众能更多的和更有效率的接收网页上的信息,

从而使他们对给网站留下很好的印象,那就更能促进自己网站的运作。在这种标准的要求下,逐步产生了

审美的需求。这需要从审美的方面入手,结合使用方便的要求,就能制作出清晰、整体性好的页面。使人

浏览起来心情愉快,接收信息也会更加容易。同时提升网站的形象。

运用一些平面设计中美的基本形

式到网页中去就能是网页更加富有美感,例如将

href=”http://www.fededu.com/Kecheng_Display.asp?id=336″>平面设计中的节奏与韵律和骨格的形

式溶入到网页中,这样会使内容繁多的页面更加有条理,也会是人浏览起来主次分明。当然这种美首先建

立在页面的内容充实,而且实用,一个内容空洞无物的网页既使做得再漂亮也不会吸引人,顶多赢得几声

赞叹,没有任何的用处。没有实用性的东西是不会具有生命力的。要想将页面做的更漂亮,就要求

href=”http://www.fededu.com/default.asp”>设计师要用较好的审美方面的素质,同时要有丰富的

平面设计的经验。这样才能在设计时驾轻就熟。

由于网页的从无到有,从满足基本的功能需要到追求美的较为高层次的需要,这是一个循序渐进的过程。

这使人不由得想起工业革命前夕,很多现代的产品那时候都没有,没有现成的模样可以参照,产品的设计

都是满足基本的功能需要出发,所以做出来的产品非常粗糙,冷冰冰的,毫无生气。由于商业竞争和工业

化大生产的结果,使得人们不断的改进产品的功能,更为重要的是改进产品的外观,是产品更符合美的需

要和使用方便。从而使今天货架上出现了琳琅满目的漂亮的产品。我想网页同样也是如此,在满足了基本

的功能的要求之后,为了突出自己的特色,突出自己的优势,必须从审美上入手。而目前很多国内网站的

现状是什么样子的呢?经常上网的网友可能会有所体会。目前的网页存在着诸多的不足,以下简单的分析

一下,希望能从中得到一些启示。随后我们再为大家介绍一些

href=”http://www.fededu.com/kecheng_display.asp?id=297″>网页设计的审美法则。

第一个可以用一个字来形容,那就是“塞”

这是很多的网页都具有的特点,它将各种信息诸如文字、图片、动画等不加考虑的塞到页面上,有多少挤

多少,不加以规范化,条理化,更谈不上艺术处理了。导致浏览时会遇到很多的不方便,主要就是页面五

花八门,不分主次,没有很好的归类,整体一个大的杂烩。让人难以找到需要的东西。

第二也可用一个字“花”来形容

这类网站也有不少,显然这是很多不懂设计的人来制作的。比较多是他们把页面做的很花哨,但是非常不

实用,例如采用很深的带有花哨图案的图片作为背景,严重干扰了浏览,获取信息很困难。同时有些还采

用了颜色各异,风格不同的图片、文字、动画。使页面五彩缤纷。没有整体感觉,尽管有些页面内容不多

,但是浏览起来仍然特别困难。这种过度的包装甚至不如不加任何装饰的页面。不加装饰最起码不会损害

其基本的功能的需求。所以这种网页属于粗制滥造的次品,是对自己的受众不负责任的表现。或许他们的

初衷是好的,就是想把自己的页面做的漂亮,结果却是适得其反。

第三个现在网页设计中的误区就是千篇一律,缺乏自己的特色

当我们打开电脑,上网一看,好像哪个网站都是一样的。从标题的放置,按钮的编排到动画的采用都是如

此。用色时随心所欲,只要能区分开文本和背景就达到目的。造成这种原因就是

href=”http://www.fededu.com/kecheng_display.asp?id=297″>网页设计师本身的原因,他们没有充

分的利用自己的知识,分析自己网站的优势,发挥自己的网站的特点,而是采用的走捷径的方式,就是用

大众化的方法去做,做起来当然很容易了,但是失去了自己特点的网页就像流水线上下来的产品,好像随

便看哪一个都一样,这样就不能起到网页设计的目的。至少不能算设计。这也是对自己的用户不负责任的

表现。当然这里不是片面的唯美主义,不能只是看中页面的漂亮而不顾受众的使用的不方便。例如有些网

页将按钮溶入到页面的图片中去,倒是比较漂亮了,整体感强了。但是受众有时候却找不到按钮,造成困

难。这同样是不可取的。

Jul 12

关于CSS的一些个人见解

分类:网页制作 | 给我留言 | 点击量28次

一、absolute布局

现在B/S架构的网络应用程序越来越多,开发的时候界面布局是个头疼的问题,如何让界面能在不多的浏览器窗口范围内展示更多的内容,同时又能排布尽量多的功能模块,还要求整体布局随窗口和分辨率自适应?请看这篇文章吧:Html+CSS 构建 B/S结构软件界面 — 布局篇 — position方式。虽然我以前也曾想过用html全absolute来实现flash的mc布局方式,但最终由于失去了html的文档式的布局便捷而放弃。而作者通过使用position:absolute和其他html布局方式的结合来完成了传统C/S软件的流布局和边界布局,除了IE6的css隐患以外,是非常值得借鉴的思想。

二、css的hack

相信不少人在写页面的时候会用到css的hack,幻想通过这种方式不被各种不兼容部分标准的浏览器虐,但实际情况往往麻烦,避免了一个,如何避免另一个?不过我个人基本不抱有这种幻想,有时候宁愿多加一个元素也要尽量避免使用hack。如果你认为某些情况下不得不用,那么建议在使用之前看看zergine同学为“响应版主号召”的CSS Hack整理

三、css省略号

标题列表是非常常用的模块,而对于长文本的字符截断总是很麻烦,有时候我们甚至把这个皮球踢给后端的程序员来解决。不过读过这篇文章也许你以后会勇敢的承担在前端用css实现长文本截断的重任:用css使单行超出指定宽度的内容切去并在结尾出现省略号(IE FF 通过)

Jul 12

正则表达式详解

分类:lamp技术 | 给我留言 | 点击量19次

首先,让我们看看两个特别的字符:”^” 和 “$” 他们是分别用来匹配字符串的开始和结束,一下分别举例说明:
“^The”: 匹配以 “The”开头的字符串;
“of despair$”: 匹配以 “of despair” 结尾的字符串;
“^abc$”: 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配;
“notice”: 匹配包含notice的字符串;
你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边。
这里还有几个字符 ‘*’, ‘+’,和 ‘?’, 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:”zero or more”, “one or more”, and “zero or one.” 这里是一些例子:
“ab*”: 匹配字符串a和0个或者更多b组成的字符串(”a”, “ab”, “abbb”, etc.);
“ab+”: 和上面一样,但最少有一个b (”ab”, “abbb”, etc.);
“ab?”:匹配0个或者一个b;
“a?b+$”: 匹配以一个或者0个a再加上一个以上的b结尾的字符串.
你也可以在大括号里面限制字符出现的个数,比如
“ab{2}”: 匹配一个a后面跟两个b(一个也不能少)(”abb”);
“ab{2,}”: 最少更两个b(”abb”, “abbbb”, etc.);
“ab{3,5}”: 2-5个b(”abbb”, “abbbb”, or “abbbbb”).
你还要注意到你必须总是指定 (i.e, “{0,2}”, not “{,2}”).同样,你必须注意到, ‘*’, ‘+’, 和’?’ 分别和一下三个范围标注是一样的,”{0,}”, “{1,}”, 和 “{0,1}”。
现在把一定数量的字符放到小括号里,比如:
“a(bc)*”: 匹配 a 后面跟0个或者一个”bc”;
“a(bc){1,5}”: 一个到5个 “bc.”
还有一个字符 ‘│’, 相当于OR 操作:
“hi│hello”: 匹配含有”hi” 或者 “hello” 的 字符串;
“(b│cd)ef”: 匹配含有 “bef” 或者 “cdef”的字符串;
“(a│b)*c”: 匹配含有这样 - 多个(包括0个)a或b,后面跟一个c的字符串 的字符串;
一个点(’.’)可以代表所有的 单一字符:
“a.[0-9]”: 一个a跟一个字符再跟一个数字的 (含有这样一个字符串的字符串将被匹配,以后省略此括号)
“^.{3}$”: 以三个字符结尾.中括号括住的内容只匹配一个 单一的字符
“[ab]”: 匹配单个的 a 或者 b ( 和 “a│b” 一样);
“[a-d]”: 匹配’a’ 到’d’的单个字符 (和”a│b│c│d” 还有 “[abcd]”效果一样);
“^[a-zA-Z]”: 匹配以字母开头的字符串
“[0-9]%”: 匹配含有 形如 x% 的字符串
“,[a-zA-Z0-9]$”: 匹配以逗号在加一个数字或字母结尾的字符串
你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用’^’ 作为开头 (i.e., “%[^a-zA-Z]%” 匹配含有 两个百分号里面有一个非字母 的字符串).
为了能够解释,但”^.[$()│*+?{\”作为有特殊意义的字符的时候,你必须在这些字符面前加”, 还有在php3中你应该避免在模式的最前面使用\, 比如说,正则表达式 “(\$│?[0-9]+” 应该这样调用 ereg(”(\\$│?[0-9]+”, $str) (不知道php4是不是一样)
不要忘记在中括号里面的字符是这条规路的例外—在中括号里面, 所有的特殊字符,包括(”), 都将失去他们的特殊性质(i.e., “[*\+?{}.]”匹配含有这些字符的字符串). 还有,正如regx的手册告诉我们: “如果列表里含有 ‘]’, 最好把它作为列表里的第一个字符(可能跟在’^’后面). 如果含有’-’, 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点(i.e. [a-d-0-9]中间的”-”将有效.
为了完整, 我应该涉及到 collating sequences, character classes, 同埋 equivalence classes. 但我在这些方面不想讲的太详细, 这些在下面的文章仲都不需要涉及到. 你们可以在regex man pages 那里得到更多消息.
如何构建一个模式来匹配 货币数量 的输入
好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: “10000.00″ 和 “10,000.00″,或者没有小数部分, “10000″ and “10,000″. 现在让我们开始构建这个匹配模式:
^[1-9][0-9]*$
这是所变量必须以非0的数字开头.但这也意味着 单一的 “0″ 也不能通过测试. 以下是解决的方法:
^(0│[1-9][0-9]*)$
“只有0和不以0开头的数字与之匹配”,我们也可以允许一个负号再数字之前:
^(0│-?[1-9][0-9]*)$
这就是: “0 或者 一个以0开头可能有一个负号在前面的数字.” 好了, 好了现在让我们别那么严谨,允许以0开头.现在让我们放弃 负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分:
^[0-9]+(\.[0-9]+)?$
这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 “10.” 是不匹配的, 只有 “10″ 和 “10.2″ 才可以. (你知道为什么吗)
^[0-9]+(\.[0-9]{2})?$
我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:
^[0-9]+(\.[0-9]{1,2})?$
这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示:
^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$
不要忘记加号 ‘+’ 可以被乘号 ‘*’ 替代如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 “\” 在字符串中可能会出现错误 (很普遍的错误). 现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(”,”, “”, $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了.
构造检查email的正则表达式
让我们继续讨论怎么验证一个email地址. 在一个完整的email地址中有三个部分: POP3 用户名 (在 ‘@’ 左边的一切), ‘@’, 服务器名(就是剩下那部分). 用户名可以含有大小写字母阿拉伯数字,句号 (’.’), 减号(’-’), and 下划线 (’_’). 服务器名字也是符合这个规则,当然下划线除外.
现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:
^[_a-zA-Z0-9-]+$
现在还不能允许句号的存在. 我们把它加上:
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$
上面的意思就是说: “以至少一个规范字符(除.意外)开头,后面跟着0个或者多个以点开始的字符串.”
简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 “a-z” 和 “A-Z” – 只需要指定一个就可以了:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*$
后面的服务器名字也是一样,但要去掉下划线:
^[a-z0-9-]+(\.[a-z0-9-]+)*$
Done. 现在只需要用”@”把两部分连接:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$
这就是完整的email认证匹配模式了,只需要调用
eregi(”^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$ “,$eamil)
就可以得到是否为email了。
正则表达式的其他用法
提取字符串
ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要:
ereg(”([^\\/]*)$”, $pathOrUrl, $regs);
echo $regs[1];
高级的代换
ereg_replace() 和 eregi_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号:
ereg_replace(”[ \n\r\t]+”, “,”, trim($str));

LOGO图片