为什么不推荐使用 PHP 中的某些函数(例如eregi
)?我通常eregi
用于电子邮件验证。
我应该使用它,还是可以使用其他功能代替它?
如前所述,您不应使用 eregi 或任何其他不推荐使用的函数,因为它们已在下一版本的 PHP 中被删除。
查看基于 PCRE(Perl 兼容正则表达式)替代方案的 preg* 函数( preg_match和preg_match_all是电子邮件验证所需的函数)。eregi* 函数是基于 posix 的正则表达式,因此 PCRE 的语法略有不同,但不是主要变化。
为什么一个函数会被弃用?维基百科建议:
ereg
并被eregi
弃用,因为它们不适用于 Unicode。
回答“为什么不推荐使用 ereg?”这个问题。, Rasmus Lerdorf曾这样说:
真正的答案是 ereg 函数中没有 Unicode 支持,不管你喜不喜欢,世界正在走向 Unicode。
请参阅PHP-DEV 邮件列表上的讨论。
不应使用已弃用的功能;这是因为,虽然它们在当前版本的解释器中正常工作,但它们可能(并且将)从未来版本中完全删除。
因此,如果您在旧项目中使用它们,您不妨保留它们(但您的项目在迁移到新的 php 版本时可能会中断)。
但绝对不要在新项目中使用它们。
它的用法是正确的,但已弃用。这意味着在 PHP 的未来版本中,此方法可能会被删除。这可能是由于安全、冗余或其他原因。通常,您可以使用其他方法来代替这些方法(例如,eregi -> preg_match)
如果您希望脚本向前兼容,则不应使用已弃用的函数。它们现在可以工作,但将来可能无法工作。或者,更糟糕的是,他们提出了一个严重的错误,无法轻易修复,但需要修复单个功能无法涵盖的更大更改。
在您的情况下,eregi 将从 PHP 6 中删除,您的脚本将简单地失败。使用preg_match()
或preg_match_all()
代替。
正如其他人所提到的,您不应使用已弃用的函数,而应查看 preg 函数。
特别是对于电子邮件验证,如果您的 Web 应用程序将在 PHP 5.2 及更高版本的服务器上运行,则可能值得查看 PHP 的过滤器(特别是filter_var )函数。过滤器功能还可用于 url 验证和验证 IP 地址等。
只需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';