0

0

为什么经验丰富的开发人员从不使用正则表达式进行电子邮件验证?

碧海醫心

碧海醫心

发布时间:2024-12-05 22:39:13

|

360人浏览过

|

来源于dev.to

转载

无人谈论的问题

说实话:电子邮件验证听起来很简单,但它是一个技术陷阱,即使是经验丰富的开发人员也会陷入困境。

到底发生了什么?

假设您正在构建一个注册表单。你的第一直觉?在电子邮件字段中添加正则表达式。糟糕的举动。

实际有效的奇怪电子邮件

# these are all technically valid emails!
valid_emails = [
    '"very.unusual.@.unusual.com"',
    'admin@mailserver1',
    'user+tag@gmail.com',
    'postmaster@[123.123.123.123]'
]

大多数正则表达式引擎都会因这些而窒息。

为什么

电子邮件标准太疯狂了。

大多数开发人员会惊讶地发现,根据 rfc 5322,这些实际上是技术上有效的电子邮件地址。该规范允许:

  • 引用本地部分
  • 括号内的评论
  • 嵌套评论
  • 当地的特殊字符
  • 多个域标签

错误验证的隐性成本

1. 失去真实用户

严格的正则表达式可能会拒绝完美的电子邮件地址。想象一下因为潜在客户的电子邮件看起来“奇怪”而拒绝他们,就像有:

  • 加上地址 (user tags@gmail.com)
  • 非常规的域结构
  • 国际字符集
  • 合法但复杂的命名约定

你的产品团队会非常不高兴,更重要的是;销售真的会很生气。

2.redos攻击

使用回溯的正则表达式引擎容易受到正则表达式拒绝服务 (redos) 攻击。

def dangerous_regex_check(user_input):
    # this regex can destroy your server's performance
    evil_pattern = r'^(a+)+b$'
    return re.match(evil_pattern, user_input)

# just 30 characters can crash your system
malicious_input = 'a' * 30 + 'b'

攻击者可以精心设计输入,使您的验证函数陷入停顿。

CodiumAI
CodiumAI

AI代码测试工具,在IDE中获得重要的测试建议

下载

更明智的方法

实际有效的基本验证

def smart_email_check(email):
    """quick and dirty email sanity check"""
    return (
        email and 
        '@' in email and 
        '.' in email.split('@')[1] and
        len(email) <= 254  # email length limit
    )

真正的解决方案:验证

  1. 基本语法检查
  2. 发送验证链接
  3. 让用户证明电子邮件有效
def validate_email(email):
    if not basic_email_check(email):
        return false

    # send verification token
    token = generate_unique_token()
    send_verification_email(email, token)

    return true

面向真正开发人员的 pro tools

不要编写自己的正则表达式,而是使用经过测试的库:

  • python:电子邮件验证器
  • javascript:validator.js
  • java:apache commons 验证器

更好的验证类

class EmailValidator:
    @staticmethod
    def validate(email):
        """
        Smart email validation
        - Quick syntax check
        - Verify deliverability
        """
        try:
            # Use a smart library
            validate_email(
                email, 
                check_deliverability=True
            )
            return True
        except EmailInvalidError:
            return False

底线

电子邮件验证并不是要创建一个牢不可破的堡垒。这是关于:

  • 让真实用户进入
  • 确保您的系统安全
  • 不要让事情变得复杂

要点

  1. 忘记复杂的正则表达式
  2. 使用经过验证的库
  3. 发送验证邮件
  4. 用户友好

正确做到这一点的开发人员可以避免无数的麻烦。

想要我进一步分解其中的任何部分吗?

顺便说一句,我正在开发一个无限制的上下文工具,您可以在其中使用您喜欢的法学硕士,而无需一次又一次地提供上下文。

请检查一下,它对开发者完全免费。


为什么经验丰富的开发人员从不使用正则表达式进行电子邮件验证?

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

778

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

684

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

768

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

739

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1445

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

571

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

751

2023.08.11

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

70

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 21.3万人学习

Django 教程
Django 教程

共28课时 | 3.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号