0

PHP の特定の関数 ( などeregi) が非推奨になっているのはなぜですか? 私は通常eregi、電子メールの検証に使用します。

私はそれを使用する必要がありますか、それとも代わりに使用できる別の機能はありますか?

4

7 に答える 7

5

eregeregiUnicodeで動作しないため、非推奨になりました。

「なぜeregは非推奨になるのですか?」という質問に答えます。、ラスマス・ラードルフはこう言っています:

本当の答えは、ereg関数にはUnicodeサポートがなく、好むと好まざるとにかかわらず、世界はUnicodeに移行しているということです。

PHP-DEVメーリングリストの説明を参照してください。

于 2009-11-16T10:47:10.103 に答える
5

前述のように、eregi やその他の非推奨の関数は、PHP の次のバージョンで削除されるため、使用しないでください。

PCRE (Perl Compatible Regex) ベースの代替の preg* 関数を見てください( preg_matchpreg_match_allは、電子メール検証に必要な関数です)。eregi* 関数は posix ベースの正規表現だったので、PCRE の構文はわずかに異なりますが、大きな変更はありません。

関数が非推奨になるのはなぜですか? ウィキペディアは次のように提案しています。

  • この機能は、より強力な代替機能に置き換えられました。
  • この機能は無関係であると見なされ、システム全体を簡素化するために将来的に削除される予定です。
  • ソフトウェアの将来のバージョンでは、古い機能をサポートすることが不可能 (または非現実的) になる大きな構造上の変更が予定されています。
  • 命名の標準化または一貫性の向上
  • この機能には設計上の欠陥 (多くの場合、セキュリティ上の欠陥) が含まれているため、回避する必要がありますが、既存のコードはそれに依存しています。
于 2009-11-16T10:23:26.220 に答える
0

他の人が述べているように、非推奨の関数を使用するのではなく、代わりにpreg関数を確認する必要があります。

特に電子メールの検証では、WebアプリケーションがPHP 5.2以降を搭載したサーバーで実行される場合は、PHPのフィルター(具体的にはfilter_var)関数を確認する価値があります。フィルタ機能は、URLの検証やIPアドレスの検証などにも使用できます。

于 2009-11-16T12:37:51.473 に答える
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_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 に答える