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 完成。相反,您的控制器应该检查该段并对其执行验证。如果不匹配重定向重新注册或输出错误信息,否则继续注册。

顺便说一句,验证电子邮件地址时不要重新发明轮子。filter_var()PHP 通过该函数内置了验证。

例子:

$email = 'joe@example.com';

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