php - 使用 CodeIgniter 中 valid_email 方法的正则表达式路由包含电子邮件的 URL 以进行电子邮件验证

标签 php regex codeigniter url-routing

我创建的用于验证用户的电子邮件验证链接如下:

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/

相关文章:

python - python中的正则表达式,匹配html标签之外的词

php - spl_autoload_register 在包含的文件中不起作用

php - 是否可以缩短 $mysqli->queries ?

php - 类 Entities\USER_User 中的注释 "@Doctrine\ORM\Mapping\Entity"不存在,或者无法自动加载

php - 我们如何在 ConfigureIT 管理或数据面板的产品模块列表中显示产品价格的总计

codeigniter - 使用 Controller 类作为助手或模型

php - CodeIgniter MySQL 查询不工作

php - CSS 颜色在 HTML 电子邮件中丢失

javascript - document.cookie.match不一致,有时提取错误的cookie值

php - 需要防止 PHP 正则表达式段错误