今天在用正则校验电子邮件格式时,遇到一个奇怪的问题,同样的正则表达式在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。
--------- 修改后,心中踏实了,^_^