您的位置:首页 > 编程语言 > PHP开发

【ERROR_5】php中使用正则

2011-01-05 17:52 155 查看
今天在用正则校验电子邮件格式时,遇到一个奇怪的问题,同样的正则表达式在js时校验 输入email地址格式正确,但在服务端校验为不通过。于是纳闷了,QQ群里问了一圈,有人时候是php中正则和js正则有些不一样,经过一番试验,排除了此可能性。那究竟是什么原因导致这一问题的出现了呢? 打开 error_reporting(E_ALL); 问题呈现出来了:

Deprecated: Function ereg() is deprecated in ....

不支持 ereg()函数? 《php和MySql Web开发(原书第4版)》上就是这么说的呀,怎么会不支持了呢?(看来我太相信书上说的了!)

搜索了一通,终于找到原因及解决办法了,如下(来自http://hi.baidu.com/ooleo/blog/item/70fc5b820d6d5081f703a60e.html):

Deprecated: Function ereg() is deprecated in D:/wamp/www/index.php on line 176

Deprecated: Function ereg_replace() is deprecated in D:/wamp/www/index.php on line 179

Deprecated: Function ereg_replace() is deprecated in D:/wamp/www/index.php on line 179

以上报错是因为PHP版本是5.3,5.3的版本废弃了‍ereg() 、‍ereg_replace() ,所以会出现这个问题,DEDE的程序都是用的这个如果用5.3版本的php就会出现这个,具体解决办法:

如果一定要用php5.3,请修改php.ini中下面代码

;extension=php_mbstring.dll
改为
extension=php_mbstring.dll

;mbstring.func_overload = 0
修改为:
mbstring.func_overload = 7

------------

原来5.3的版本就不支持这个了(后来发现 应该是 3.0.9 以上版本就不支持这个函数了),按上述方法修改了,果然好了。(我的extension=php_mbstring.dll 本身就是开启的,所以未修改)

------------

问题虽然解决了,但心里总觉得不踏实,要用ereg()这个函数,还得修改php.ini ,这个到时候发布到外网后,外网服务器不支持怎么办?

既然5.3版本不支持这方法,那应该有它支持的实现该功能的函数吧!找找吧!

------------

找出结果如下:

5.3 版本对应的方法:preg_match()

如下是来自百度百科的内容:

preg_match (PHP 3 >= 3.0.9, PHP 4, PHP 5)

  preg_match -- 进行正则表达式匹配

【说明】

int preg_match ( string pattern, string subject [, array matches [, int flags]] )

  在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。

  如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。

  flags 可以是下列标记:

  PREG_OFFSET_CAPTURE 如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自 PHP 4.3.0 起可用。

  flags 参数自 PHP 4.3.0 起可用。

  preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。如果出错 preg_match() 返回FALSE。

--------- 修改后,心中踏实了,^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: