2

ユーザーを検証するために作成するメール検証リンクは次のとおりです。

site_url/user@example.com/hash_to_verify

上記のような URL を登録コントローラーの activate_user メソッドにルーティングしようとしています。CodeIgniter の valid_email メソッドで使用されているものと同じ正規表現を使用してみましたが、機能していないようです (activate_user メソッドにルーティングされません)。

$route['registration/(/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix)/(:any)'] = 'registration/activate_user/$1';

1) ルートのどこで間違ったのですか?

2) このように URL をフォーマットすることは、メールを確認するために受け入れられますか?

ありがとう

4

1 に答える 1

2
$route['registration/(/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix)/(:any)']

次のようにする必要があります。

$route['registration/([\w+-]+)(\.[\w+-]+)*@([a-zA-Z\d-]+\.)+[a-zA-Z]{2,6}/(:any)']

文字列全体が、区切り記号や修飾子のない正規表現です。区切り文字、修飾子を入れていて、 and も使用^して$いました。

正規表現を簡略化しましたが、電子メールの検証は URL 経由で行うべきではありません。代わりに、コントローラーはそのセグメントをチェックし、検証を実行する必要があります。一致しない場合は、リダイレクトして再登録するか、エラー メッセージを出力します。それ以外の場合は、登録を続行します。

ところで、電子メール アドレスを検証するときに車輪を再発明しないでください。PHP には、関数による検証が組み込まれていfilter_var()ます。

例:

$email = 'joe@example.com';

if (filter_var($email, FILTER_VALIDATE_EMAIL)) 
{
    echo 'valid';
}
于 2013-02-14T22:02:03.973 に答える