0

为什么不推荐使用 PHP 中的某些函数(例如eregi)?我通常eregi用于电子邮件验证。

我应该使用它,还是可以使用其他功能代替它?

4

7 回答 7

5

如前所述,您不应使用 eregi 或任何其他不推荐使用的函数,因为它们已在下一版本的 PHP 中被删除。

查看基于 PCRE(Perl 兼容正则表达式)替代方案的 preg* 函数( preg_matchpreg_match_all是电子邮件验证所需的函数)。eregi* 函数是基于 posix 的正则表达式,因此 PCRE 的语法略有不同,但不是主要变化。

为什么一个函数会被弃用?维基百科建议:

  • 该功能已被更强大的替代功能所取代。
  • 该功能被认为是无关的,将来会被删除,以简化整个系统。
  • 该软件的未来版本计划进行重大的结构更改,这使得支持旧功能成为不可能(或不切实际)。
  • 命名的标准化或增加的一致性
  • 该功能包含一个设计缺陷——通常是一个安全缺陷——因此应该避免,但现有代码依赖于它。
于 2009-11-16T10:23:26.220 回答
5

ereg并被eregi弃用,因为它们不适用于 Unicode。

回答“为什么不推荐使用 ereg?”这个问题。, Rasmus Lerdorf曾这样说:

真正的答案是 ereg 函数中没有 Unicode 支持,不管你喜不喜欢,世界正在走向 Unicode。

请参阅PHP-DEV 邮件列表上的讨论。

于 2009-11-16T10:47:10.103 回答
0

不应使用已弃用的功能;这是因为,虽然它们在当前版本的解释器中正常工作,但它们可能(并且将)从未来版本中完全删除。

因此,如果您在旧项目中使用它们,您不妨保留它们(但您的项目在迁移到新的 php 版本时可能会中断)。

但绝对不要在新项目中使用它们。

于 2009-11-16T10:24:00.207 回答
0

它的用法是正确的,但已弃用。这意味着在 PHP 的未来版本中,此方法可能会被删除。这可能是由于安全、冗余或其他原因。通常,您可以使用其他方法来代替这些方法(例如,eregi -> preg_match)

于 2009-11-16T10:24:07.123 回答
0

如果您希望脚本向前兼容,则不应使用已弃用的函数。它们现在可以工作,但将来可能无法工作。或者,更糟糕的是,他们提出了一个严重的错误,无法轻易修复,但需要修复单个功能无法涵盖的更大更改。

在您的情况下,eregi 将从 PHP 6 中删除,您的脚本将简单地失败。使用preg_match()preg_match_all()代替。

于 2009-11-16T10:26:27.460 回答
0

正如其他人所提到的,您不应使用已弃用的函数,而应查看 preg 函数。

特别是对于电子邮件验证,如果您的 Web 应用程序将在 PHP 5.2 及更高版本的服务器上运行,则可能值得查看 PHP 的过滤器(特别是filter_var )函数。过滤器功能还可用于 url 验证和验证 IP 地址等。

于 2009-11-16T12:37:51.473 回答
0

只需preg_match与 'i' 修饰符一起使用

echo eregi('[\w\.-_]+@[\w\.-_]+\.([a-z]{2,3})', $email) ? 'correct' : 'wrong';
echo preg_match('#[\w\.-_]+@[\w\.-_]+\.([a-z]{2,3})#i', $email) ? 'correct' : 'wrong';
于 2010-07-23T04:17:07.970 回答