我创建的用于验证用户的电子邮件验证链接如下:
site_url/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aedbddcbdceecbd6cfc3dec2cb80cdc1c3" rel="noreferrer noopener nofollow">[email protected]</a>/hash_to_verify
我正在尝试将上面的 URL 路由到我的注册 Controller 中的 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) 以这种方式格式化我的网址来验证电子邮件是否可以接受?
谢谢
最佳答案
$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 完成。相反,您的 Controller 应该检查该段并对其执行验证。如果不匹配则重定向重新注册或输出错误信息,否则继续注册。
顺便说一句,在验证电子邮件地址时不要重新发明轮子。 PHP 通过 filter_var()
函数进行内置验证。
示例:
$email = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1872777d587d60797568747d367b7775" rel="noreferrer noopener nofollow">[email protected]</a>';
if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo 'valid';
}
关于php - 使用 CodeIgniter 中 valid_email 方法的正则表达式路由包含电子邮件的 URL 以进行电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884597/