Function ereg() is deprecated in

PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”。问题根源是php中有两种正则表示方法,一个是posix,一个是perl,php6打算废除posix的正则表示方法所以后来就加了个preg_match。此问题解决办法很简单,在ereg前加个过滤提示信息符号即可:把ereg()变成@ereg()。这样屏蔽了提示信息,但根本问题还是没有解决,php在5.2版本以前ereg都使用正常,在5.3以后,就要用preg_match来代替ereg。所以就需要变成这样,原来:

ereg("^[0-9]*$",$page)

变成:

preg_match("/^[0-9]*$/",$page)

特别提醒:posix与perl的很明显的表达区别就是是否加斜杠,所以与ereg相比,后者在正则的前后分别增加了两个”/”符号,不能缺少。
Tips:此问题在php5.2之前版本不会出现。


*********************************************************************

在php5.3环境下运行oscommerce,常常会出现Deprecated: Function ereg() is deprecated in...和Deprecated: Function ereg_replace() is deprecated in...这些类型的报错提示。
  其原因在于:php5.3以上的版本不支持ereg()函数,而是使用preg_match()函数;不支持ereg_replace()函数,而使用preg_replace()函数。
  解决方法:将不支持的函数修改为支持的函数即可。
  
  例如:
  Deprecated: Function eregi() is deprecated in D:\www\oscommerce\catalog\includes\classes\language.php on line 87
  那么,将87行的
  if(eregi('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $this->browser_languages[$i])
  改为:
  if(preg_match('/^(' . $value . ')(;q=[0-9]\\.[0-9])?$/i', $this->browser_languages[$i])
  
  再例如:
  Deprecated: Function ereg_replace() is deprecated in C:\wamp\www\includes\functions\general.php on line 61
  那么,将61行的
  $string = ereg_replace(' +', ' ', trim($string));
  改为:
  $string = preg_replace('{ +}', ' ', trim($string));
  
  如此类推,其它类似的错误也可以按照上面两个函数的语法来做修改。


*********************************************************************

Function ereg() is deprecated Error 错误对策

错误:
Deprecated: Function ereg() is deprecated in ……

解决方法一:
退回去用php5.2。(众人皆赞道:果是好法子!)

解决方法二:
继续用php5.3,但是修改devel/devel.modul的460行:
if ($errno & (E_ALL ^ E_NOTICE)) {
改为
if ($errno & (E_ALL & ~E_NOTICE & ~E_DEPRECATED)) {
把丫deprecated错误给忽略掉。(众人皆又赞道:果……果……果是好法子!)

解决方法三:
动程序鸟,把ereg换成preg_match,ereg_replace也需得换成preg_replace。只得注意的是
ereg(’^[0-9]‘    需修改成   preg_match(’/^[0-9]/‘
无敌//必须加,哈哈。(众人皆俯首赞道:王道也!)

ereg_replace是php5.3中废弃的标签,不推进使用了。解决方法很简单,就是将dede\config.php文件的第二行替换成

define(’DEDEADMIN’, preg_replace(”/[\/\\\\]{1,}/”, ‘/’, dirname(__FILE__) ) );这样就不会报错了。遇到同样问题的朋友们不妨试一试。
<think>好的,我现在要回答用户关于PHP的ereg方法的问题。首先,我需要确认自己对这个函数的了解程度。ereg是PHP中用于正则表达式匹配的函数,但记得在PHP 5.3之后被弃用了,并且在PHP 7.0中完全移除了。用户可能在使用旧版代码时遇到了这个函数,所以需要解释清楚它的作用和现状。 接下来,我需要整理ereg的基本用法。它用于检查字符串是否符合某个正则表达式模式,返回布尔值。比如ereg('^[a-zA-Z0-9]+$', $str)用来验证字符串是否只包含字母和数字。但要注意,ereg默认使用POSIX扩展正则表达式,和现在更常用的PCRE(Perl兼容正则表达式)有所不同,比如在语法上可能有些差异,比如POSIX不需要使用分隔符。 然后要说明ereg被弃用和移除的原因。可能包括性能问题、功能限制,以及PHP社区转向更强大和一致的PCRE函数,比如preg_match。这里需要提醒用户,如果在现代PHP版本中使用ereg会导致错误,应该迁移到preg_match。 接下来,需要给出替换示例。比如ereg('^[a-z]+$', $str)对应的preg_match是preg_match('/^[a-z]+$/i', $str),这里要注意分隔符的添加和修饰符的使用,比如i表示不区分大小写。同时,注意参数顺序的变化,ereg的模式是第一个参数,而preg_match的模式是第一个参数,但需要用斜杠包裹,并且可能有其他修饰符。 另外,要指出一些函数的变化,比如ereg_replace对应preg_replace,但同样需要注意语法差异。还要提醒用户在迁移时处理可能的语法调整,比如元字符的转义和捕获组的用法不同。 最后,总结建议,避免使用ereg,改用preg系列函数,并确保正则表达式语法正确。可能需要检查旧代码中的正则表达式是否符合PCRE规范,进行必要的调整。同时,提示用户如果遇到具体问题,可以提供更多细节以便进一步帮助。</think>以下是对PHP `ereg` 方法的介绍及迁移建议: --- ### **1. `ereg` 是什么?** - **定义**:`ereg` 是PHP早期版本(PHP 4/5)中用于**正则表达式匹配**的函数,属于**POSIX风格正则**。 - **用途**:检查字符串是否匹配指定模式,例如验证邮箱、电话号码格式。 - **语法**: ```php bool ereg(string $pattern, string $string [, array &$regs]) ``` --- ### **2. `ereg` 的基本用法示例** ```php $str = "test123"; if (ereg('^[a-zA-Z0-9]+$', $str)) { echo "字符串合法"; } else { echo "字符串非法"; } ``` 输出:`字符串合法`(因为仅包含字母和数字) --- ### **3. `ereg` 已被弃用** - **弃用时间**:PHP 5.3 开始弃用,PHP 7.0 完全移除。 - **弃用原因**: - **性能低**:POSIX正则引擎效率较差。 - **功能局限**:不支持现代正则语法(如命名捕获组、非贪婪匹配等)。 - **一致性差**:PHP转向更强大的**PCRE正则**(Perl兼容正则表达式)。 --- ### **4. 替代方案:`preg_match`** 推荐使用`preg_match`(PCRE风格),语法更强大且兼容现代PHP。 #### **迁移示例** - **原`ereg`代码**: ```php ereg('^[a-z]+$', $str); // 检查小写字母 ``` - **替换为`preg_match`**: ```php preg_match('/^[a-z]+$/i', $str); // 添加分隔符`/`,`i`表示不区分大小写 ``` --- ### **5. 迁移注意事项** 1. **分隔符**:PCRE正则必须用分隔符(如`/`、`#`),例如 `/pattern/`。 2. **模式修饰符**:如`i`(忽略大小写)、`s`(允许`.`匹配换行)。 3. **函数替换**: - `ereg` → `preg_match` - `eregi`(不区分大小写)→ `preg_match` + `i`修饰符 - `ereg_replace` → `preg_replace` --- ### **6. 常见问题** - **错误提示**:若PHP 7+中使用`ereg`,会报错: ```php Fatal error: Uncaught Error: Call to undefined function ereg() ``` - **正则语法调整**:部分POSIX语法需改写为PCRE格式,例如: - POSIX:`[[:alnum:]]` → PCRE:`[a-zA-Z0-9]` - POSIX:`[[:digit:]]` → PCRE:`\d` --- ### **总结** - **避免使用`ereg`**:旧代码需迁移到`preg_match`等PCRE函数。 - **验证正则兼容性**:使用在线工具(如regex101.com)检查正则表达式是否兼容PCRE。 - **文档参考**:查阅PHP官方手册 [PCRE Functions](https://www.php.net/manual/en/ref.pcre.php)。 如需进一步帮助(如具体代码迁移),可提供更多细节!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值