我创建的用于验证用户的电子邮件验证链接如下:
site_url/user@example.com/hash_to_verify
我正在尝试将类似上面的URL路由到注册控制器中的activate_user方法。我尝试使用CodeIgniter中valid_email方法中使用的相同regex,但它似乎不起作用(没有路由到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以验证电子邮件是否可以接受?
感谢
$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)']
整个字符串是一个不带分隔符或修饰符的正则表达式。您使用了分隔符、修饰符,还使用了^
和$
。
我简化了正则表达式,但是电子邮件验证不应该通过URL进行。相反,您的控制器应该检查该段并对其执行验证。如果它与重定向到重新注册或输出错误消息不匹配,则继续注册。
顺便说一句,验证电子邮件地址时不要重新发明轮子。PHP通过filter_var()
函数内置验证。
示例:
$email = 'joe@example.com';
if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo 'valid';
}