首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不应允许允许在电子邮件验证中连续使用特殊字符

确实,在电子邮件验证过程中,连续使用特殊字符可能会引发安全问题或导致验证失败。为了确保电子邮件的有效性和安全性,建议在验证规则中限制或禁止连续使用特殊字符。以下是一些实现这一目标的建议:

1. 使用正则表达式进行验证

正则表达式(Regex)是验证电子邮件格式的常用工具。你可以编写一个正则表达式来检测并禁止连续的特殊字符。例如,以下正则表达式可以确保电子邮件中不包含两个或以上的连续特殊字符:

代码语言:javascript
复制
^[A-Za-z0-9]+(?:[._%+-][A-Za-z0-9]+)*@[A-Za-z0-9]+(?:\.[A-Za-z0-9]+)*$

解释:

  • ^[A-Za-z0-9]+:邮箱开始部分只能包含字母和数字。
  • (?:[._%+-][A-Za-z0-9]+)*:允许使用特殊字符(如 ., _, %, +, -),但必须跟在字母或数字之后,且不能连续出现。
  • @:必须包含一个 @ 符号。
  • [A-Za-z0-9]+(?:\.[A-Za-z0-9]+)*$:域名部分只能包含字母、数字和单个点,且不能以点开头或结尾。

2. 在后端进行验证

无论前端如何验证,后端都必须再次验证电子邮件的有效性,以确保安全性。以下是一个使用Python的示例:

代码语言:javascript
复制
import re

def is_valid_email(email):
    pattern = r'^[A-Za-z0-9]+(?:[._%+-][A-Za-z0-9]+)*@[A-Za-z0-9]+(?:\.[A-Za-z0-9]+)*$'
    if re.match(pattern, email):
        return True
    return False

# 示例
email = "user..name@example.com"
if is_valid_email(email):
    print("有效的电子邮件")
else:
    print("无效的电子邮件")

3. 前端验证(可选)

在前端进行验证可以提升用户体验,及时反馈错误信息。以下是一个使用HTML5和JavaScript的示例:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>电子邮件验证</title>
    <script>
        function validateEmail() {
            const email = document.getElementById('email').value;
            const regex = /^[A-Za-z0-9]+(?:[._%+-][A-Za-z0-9]+)*@[A-Za-z0-9]+(?:\.[A-Za-z0-9]+)*$/;
            if (!regex.test(email)) {
                alert('请输入有效的电子邮件地址,不允许连续使用特殊字符。');
                return false;
            }
            return true;
        }
    </script>
</head>
<body>
    <form onsubmit="return validateEmail();">
        <label for="email">电子邮件:</label>
        <input type="text" id="email" name="email">
        <input type="submit" value="提交">
    </form>
</body>
</html>

4. 使用现有库

如果不想自己编写复杂的正则表达式,可以使用现有的电子邮件验证库,如:

  • JavaScript: validator.js
  • Python: email-validator
  • PHP: filter_var

这些库通常已经处理了各种边界情况,并且可以轻松集成到你的项目中。

总结

通过在电子邮件验证中限制连续使用特殊字符,可以有效防止潜在的安全漏洞和格式错误。结合前后端的验证机制,并使用可靠的验证工具或库,可以确保电子邮件的有效性和安全性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

180多个Web应用程序测试示例测试用例

大于指定的最大限制的输入值不应被接受或存储在数据库中。 14.在所有输入字段中检查特殊字符。 15.字段标签应该是标准的,例如,接受用户名字的字段应该正确地标记为“名字”。...21.使用样本输入数据测试存储过程和触发器。 22.在将数据提交到数据库之前,应截断输入字段的前导空格和尾随空格。 23.主键列中不允许使用空值。...3.使用不同扩展名的图像文件(例如 JPEG,PNG,BMP等) 检查图像上传功能。4.使用文件名中带有空格或任何其他允许的特殊字符的图像检查图像上传功能。 5.检查重复的名称图像上传。...2.发送电子邮件之前,应先验证电子邮件地址。 3.电子邮件正文模板中的特殊字符应正确处理。 4. 应在电子邮件正文模板中正确处理特定于语言的字符(例如,俄语,中文或德语字符)。...12.检查包含特殊字符的页面的导出功能。检查这些特殊字符是否在Excel文件中正确导出。 性能测试测试方案 1.检查页面加载时间是否在可接受的范围内。 2.检查慢速连接上的页面加载。

8.3K21

什么是渗透测试?

这些标准的示例包括在电子邮件或电话通信中不提及任何敏感信息。可以进行安全审核,以识别和纠正过程缺陷。 #2)Web应用程序测试: 使用软件方法,可以验证应用程序是否存在安全漏洞。...密码长度至少为8个字符,其中至少包含一个数字和一个特殊字符。 用户名不应类似于“ admin”或“ administrator”。 在几次失败的登录尝试后,应将应用程序登录页面锁定。...错误消息应该是通用的,并且不应提及特定的错误详细信息,例如“无效的用户名”或“无效的密码”。 验证是否正确处理了特殊字符,HTML标记和脚本作为输入值。...内部系统详细信息不应在任何错误或警报消息中透露。 如果网页崩溃,则应向最终用户显示自定义错误消息。 验证使用注册表项。敏感信息不应保留在注册表中。 在将所有文件上传到服务器之前,必须对其进行扫描。...与Web应用程序的不同内部模块进行通信时,不应在URL中传递敏感数据。 系统中不应包含任何硬编码的用户名或密码。 验证所有带有长输入字符串且带空格和不带空格的输入字段。 验证重置密码功能是否安全。

1.3K20
  • 匹配电子邮箱的正则表达式_怎样设置电子邮箱

    电子邮件格式   电子邮件地址的格式是域内部分@域,其中域内部分最长为64个字符,而域名最长可达255个字符。...例如: name@domain name 可以使用任意ASCII字符: 大小写英文字母 a-z,A-Z 数字 0-9 name部分只允许输入 ‘-’、’_’、’.’。...^`{|}~   甚至空格都可以输入,但是有些邮件服务器会拒绝包含有特殊字符的邮件地址 一般来说只允许输入 ‘-’、’_’、’.’这三个特殊符号 字符 ‘.’...不能是第一个和最后一个,不能连续出现两次 domain 仅限于26个英文字母、10个数字、连词号- 连词号-不能是第一个字符 顶级域名(com、cn等)长度为2到6个 正则表达式 (?...[A-Za-z]{2,6}$ 引用 电子邮件地址-维基百科 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

    88120

    “安全运营”的实践之道 ,到底要不要复杂密码?

    位以上,并允许最大长度为64位的可见字符(参考RFC20标准) PIN码必须是6位以上 密码必须无任何“提示”信息,且不应提示任何特殊类型的信息,比如“你家的第一只宠物猫的名字是什么?”...在处理新增或变更密码请求时,将根据如下列表且不限于如下列表进行验证并排除该密码的变更请求 被列名的已知弱密码,比如qwerty 常见字典词,比如password等 重复的或连续的字符,比如aaaaaa,...,密码管理器在许多情况下增加了用户选择更强密码的可能性 应允许用户在输入密码的时候短暂显示每个输入的字符,以验证正确的输入,尤其适用于移动设备。...一系列的点或星号输入经常导致密码输入错误,而在最后使用View查看输入的密码却又会带来其他风险 不应该对该密码强加其他组合规则(例如,要求不同字符类型的混合或禁止连续重复字符) 服务存储密码必须保证能对抗高强度的离线破解...许多应用拒绝使用空格和各种特殊字符的密码。在某些情况下,不接受特殊字符可能是为了避免依赖于这些字符的SQL注入之类的攻击。

    45120

    深入理解正则表达式:高效处理文本数据的利器

    引言 正则表达式是一种强大的文本处理工具,广泛用于字符串匹配、搜索、替换和验证。它是编程和文本编辑中不可或缺的一部分,无论您是开发者、数据分析师还是系统管理员,都可以受益于对正则表达式的深入了解。...正则表达式(Regex或RegExp)是一种特殊的文本模式,用于描述字符组合的规则。它允许您灵活地搜索、匹配和操作文本数据,而不受固定字符串的限制。 1.2 基本语法 正则表达式由字符和元字符组成。...元字符是具有特殊含义的字符,如.、*、+等。基本语法包括: 字符匹配:abc 匹配 “abc”。 字符类:[a-z] 匹配任何小写字母。 元字符:....正则表达式的实际应用 2.1 字符串搜索和匹配 正则表达式可用于搜索文本中的特定模式,如查找电子邮件地址、URL或电话号码。...将所有制表符替换为空格:\t -> ' ' 2.3 数据验证 您可以使用正则表达式验证用户输入的数据,如电子邮件格式、密码强度等。 密码强度要求:^(?=.*[a-z])(?=.*[A-Z])(?=.

    38030

    单点登录SSO的身份账户不一致漏洞

    该漏洞的存在是因为当前的 SSO 系统高度依赖用户的电子邮件地址来绑定具有真实身份的帐户,而忽略了电子邮件地址可能被其他用户重复使用的事实在 SSO 身份验证下,这种不一致允许控制重复使用的电子邮件地址的攻击者在不知道任何凭据...B.账户与身份SSO 使终端用户能够使用他们的身份对在线帐户进行身份验证。特别是,身份是一种特殊类型的帐户,由 IdP 服务器管理和维护。在 SSO 中,用户身份用作 SP 中用户帐户的身份验证因素。...此外,SSO 规范要求为每个身份分配一个唯一编号或一组字符(称为 UserID),这些字符存储在“sub”字段中。...除了从受害者那里获得重复使用的电子邮件地址之外,威胁模型不要求攻击者具有特殊的技术技能。...措施4:IdP 不应允许重复使用电子邮件地址。身份帐户不一致威胁的主要原因之一是电子邮件地址的重新分配。减轻这种威胁的一种简单直接的方法是防止 IdP 中的任何不同身份接收相同的电子邮件地址。

    95031

    2023年度电子邮件安全报告

    ; 商业电子邮件欺诈(BEC)连续第8年成为最严重的网络犯罪形式之一; 网络钓鱼活动中使用的Web3技术增加了341%; Telegram机器人恶意活动增加了800%。...BEC连续第8年成为最严重的网络犯罪形式之一 2022年,商业电子邮件欺诈(BEC)连续第8年成为与经济损失相关的主要网络犯罪形式之一。...然而,在2022年,微软发布了一种骗子使用的称为adversary-in-the-middle(AiTM)的技术,该技术成功绕过了2FA身份验证。...安全建议 BEC/供应商电子邮件妥协 让首席执行官和其他高级管理人员在公司全体会议上讨论该威胁,并告知公司他们永远不会要求“特殊优待”或购买礼品卡; 发送带有用户报告的网络钓鱼邮件真实例子的简报。...凭据钓鱼 在整个组织中禁用自动转发规则。无法完全屏蔽?审查规则以与业务合作,允许合法业务需求的例外。因为最近的活动而重置用户的证书?

    1.1K40

    【Java 进阶篇】JavaScript 表单验证详解

    JavaScript 表单验证是网页开发中不可或缺的一部分。它允许您确保用户在提交表单数据之前输入了有效的信息。...以下是一些常见的表单验证技巧: 检查电子邮件格式 验证电子邮件地址是否符合正确的格式是非常重要的。您可以使用正则表达式来进行电子邮件验证。...密码强度验证通常包括以下要求: 至少 8 个字符 包含至少一个大写字母 包含至少一个小写字母 包含至少一个数字 包含至少一个特殊字符(例如,!...在 validateForm 函数中,您可以添加代码来检查密码字段和确认密码字段是否相同。 数值范围验证 如果您正在处理数值输入,例如年龄或金额,您可能需要验证这些数值是否在允许的范围内。...它检查了用户名是否为空,电子邮件是否为空且符合正确的格式,密码是否足够强大(至少 8 个字符),以及确认密码是否与密码相匹配。如果任何一个验证失败,对应的错误消息会显示在页面上,阻止表单的提交。

    32020

    Python网络数据抓取(8):正则表达式

    它们就像在 Word 文档上使用 Ctrl-F 一样,但功能比它们强大得多。 当您验证任何类型的用户输入时,尤其是在抓取网页时,这非常有帮助。正则表达式的应用范围非常大。...为了理解正则表达式,我们将验证您在 Python 中进行网页抓取时可能遇到的某些字符串。 假设您想从网络上抓取电子邮件以用于公司的潜在客户开发流程。...import re pattern = "[a-zA-Z0-9]+@" 括号允许我们指定我们正在查找给定字符串(例如电子邮件)中的字符。...我们将匹配模式,直到 @ 符号和括号后面的加号意味着我们正在寻找这些字符中的一个或多个字符的任意组合。 由于电子邮件是由许多域提供的,因此我们必须指定我们正在寻找一个或多个大写和小写字母。...现在,假设我们需要将每个电话号码输入到不带连字符的连续数字字符串中,但我们希望保留单词形式的连字符。我们将为此编写正则表达式。

    10510

    功能测试框架

    提示界面是否符合规范(不应该显示英文的cancel、ok,应该显示中文的确定等) 6. 界面中各个控件是否对齐 7. 日期控件是否可编辑 8....检查本地化是否通过:英文版不应该有中文信息,英文翻译准确,专业。 30. 背景灰度冻结 1.1.2 功能测试 1. 使用所有默认值进行测试 2....禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。 2. 长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。 3....;:’-=等可能导致系统错误的字符、禁止直接输入特殊字符时,尝试使用粘贴拷贝查看是否能正常提交、word中的特殊功能,通过剪贴板拷贝到输入框,分页符,分节符类似公式的上下标等、数值的特殊符号如∑,㏒,㏑...输入系统不允许的数据作为输入 2. 把某个相关模块或者子系统停掉,验证对当前系统的影响 3. 配置文件删除或者配置错误 4. 数据库注入错误数据 1.1.6 稳定性测试 1.

    86120

    你应该学习正则表达式

    这允许我们在文本块(而不是代码行)中匹配年份,这对于搜索如段落文本非常有用。 \b ——字边界 (19|20) ——使用或(|)操作数匹配’19′或’20′。...同样的脚本在Python中是这样的: ? 4 – 电子邮件验证 正则表达式也可用于输入验证。 ? 以上是一个(过于简单的)Regex,用来匹配电子邮件地址。...注意——在现实应用程序中,使用Regex验证电子邮件地址对于许多情况,例如用户注册,是不够的。但是一旦你确认输入的文本是电子邮件地址,那么你应该始终遵循发送确认/激活电子邮件的标准做法。...4.1 – 完整的电子邮件Regex 这是一个非常简单的例子,它忽略了许多非常重要的电子邮件有效性边缘情况,例如无效的开始/结束字符以及连续的周期。...我真的不建议在你的应用程序中使用上述表达式;最好是使用一个有信誉的电子邮件验证库或继续探索更完整的电子邮件验证Regex。

    5.3K20

    软件安全性测试(连载20)

    Ø 包含1个以上特殊字符。 l 至少10个字符。 l 最多128个字符。 l 连续相同字符不超过2个。...l 通过向绑定的电子邮件、手机等发送验证信息,验证成功在允许修改密码。在发送验证信息时需要对绑定的电子邮件、手机进行确认。 l 回答事先设置的安全问题,一般而言必须回答对三道才可以允许修改密码。...l 修改密码后向绑定的电子邮件、手机发送确认信息,防止他人修改。 3)凭证存储 凭证包括密码,问题的答案以及其他信息,安全存储凭证也是非常重要的。 ①对凭证的字符集与长度的考虑。...② 使用具有密码学长度的凭证盐 维基百科中定义“在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为‘加盐’”。...而具有密码学强度的随机数的字符串是不允许被猜测的,比如JAVA中使用SecureRandom生成的随机数,js中使用window.crypto.getRandomValues(array)生成的随机数等

    65410

    单元测试用例

    必传项测试 唯一字段值测试 空值测试 字段只接受允许的字符 负值测试 字段限于字段长度规范 不可能的值 垃圾值测试 检查字段之间的依赖性 等效类划分和边界条件测试 错误和异常处理测试 日期验证: 这构成了日期字段的一组条件...密码不可见 访问测试-多个级别 更改密码 错误消息不应泄露任何系统信息 检查是否正确部署了SSL 检查是否应用了锁定规则 检查密码是否以明码或加密方式保存 使用有效的UserId和无效的UserId验证应用程序...所有字段均可用 字段应有足够的空间 启用滚动和平移 页码指示报告大小(N个,共M个),并应允许访问报告中的中/终点 报告已正确导出到Excel / Word文档 报告可以正确打印,所有数据正确显示 检查报告中的所有页面是否都可访问...使用所有浏览器进行测试 通过启用和禁用Java脚本进行测试 电邮: 本节包含一组可用于验证电子邮件功能的检查 验证在发送电子邮件时是否提供确认消息 验证电子邮件中提供的链接是否正常运行 确认回复地址正确...验证电子邮件中的字体,大小和文本对齐是否正确 搜索条件: 本节包含对应用程序系统搜索功能的一系列检查。

    2.3K30

    解锁 C# 11:您必须了解的 15 个新功能(带有真实示例)

    原始字符串字面量 原始字符串字面量使得处理多行字符串更为简便,无需对特殊字符进行转义,也不用担心缩进问题。...字符串插值表达式中的换行 此功能允许你在字符串插值块中使用换行符,使复杂的插值更具可读性。...实际应用场景:在配置验证工具中检查列表是否以某些元素开头或结尾。 7. 文件局部类型 文件局部类型允许你将类型的作用域限制在其定义所在的文件内。...缺点:可能会使在大型代码库中导航变得更加困难。 实际应用场景:库中不应暴露给其他文件的内部辅助类。 8. 必需成员 C# 11引入了必需成员的概念,允许你指定在创建对象时某些属性或字段必须进行初始化。...缺点:在不增加显著价值的上下文中可能会被误用。 实际应用场景:使用nameof来确保验证逻辑中的属性名称与实际属性名称保持同步,以降低重构期间出现错误的风险。 12.

    16010

    在Debian 8上使用Postfix配置SPF和DKIM

    它还允许邮件服务器检测您的邮件何时在传输过程中被篡改。 DMARC(域消息身份验证,报告和一致性)允许您向邮件服务器通告您的域的策略与SPF和/或DKIM验证失败的邮件有关。...在没有在Postfix中配置SPF策略代理的情况下发布SPF DNS记录是安全的; 但是,在Postfix中没有OpenDKIM正常工作的情况下发布DKIM DNS记录会导致您的电子邮件被收件人的电子邮件服务器丢弃...然后,第二个项的值用于定位将使用其密钥信息的密钥表中的条目。对于传入邮件,域和选择器然后用于在DNS中查找公钥TXT记录,并且该公钥用于验证签名。...ruf指定将接收详细身份验证失败报告的电子邮件地址。这与...相同rua。使用此选项,每次身份验证失败都会生成单独的报告。 fo允许您指定将报告哪些失败的身份验证方法。...在继续之前纠正任何问题,当opendkim-testkey没有表明验证成功时将开始使用新的私钥文件和选择器将导致您的电子邮件出现问题,包括未收到邮件。

    5K00

    典藏版Web功能测试用例库

    否则直接记bug 菜单 ​ 打开页面跳转正确 ​ 点击logo跳转首页 ​ 有选中标识 ​ 菜单切换,页面内容是否刷新重置 文本框 ​ 中文、英文(大小写)、数字(正数、0、负数、整数、小数)、特殊字符...​ 特殊字符,可测可不测 ​ 最大允许条数 ​ 导入失败后,重新正确导入,导入成功 导出 ​ 文件 ​ 1、文件名 ​ 2、格式默认为.xls或.xlsx ​ 3、内容完整、正确,没有乱码...包含不允许操作的,不能批量操作,全部都回滚 ​ 全选,只处理查询出来的这部分数据 数据检查 ​ 数据流 ​ 数据缺失,数据覆盖面尽可能广一点 ​ 数据重置的问题 ​ 某些模块的数据未重置,其他模块在操作时...​ 修改后再次打开,应更新为最新信息 登录页面 ​ 界面显示 ​ 用户名、密码、验证码文本框 ​ 验证码的格式 ​ 输入密码显示为*** ​ 使用正确的用户名,密码和验证码登录成功 ​ 退出...为带出的值,不能清空 ​ 更改所有项后重置 ​ 重置后光标 ​ 修改后重置,为修改后的值 ​ 只修改不保存,退出后再次修改,未保存的数据重置 查看页面 ​ 界面显示 ​ 页面失真 ​ 特殊字符

    3.6K21

    Gmail被曝重大安全漏洞 一个Zalgo文本就能让账户“消失”

    “用指尖改变世界” 最近,来自Interlogica集团旗下网络安全公司We Are Segment的研究人员Roberto Bindi在Gmail中发现了一个严重的安全漏洞,允许攻击者通过发送特制的消息来阻止受害者使用自己的...Gmail是由谷歌公司推出的免费网络电子邮件服务,用户可以使用大多数语言发送和阅读邮件。它的界面支持覆盖38种语言,因此深受全球用户的喜爱。...在进一步的测试中,Roberto Bindi再次通过Gmail发送Zalgo文本,这次崩溃的并不是浏览器,而是Gmail本身。 收件人的确可以收到电子邮件,但并没有办法打开它。...Roberto Bindi设法找到了一种技术手段来绕过这个崩溃事件,并试图重新激活电子邮件帐户,以便进行再次测试并验证Gmail关闭的持续时间。...但是,Roberto Bindi发现,这个账户连续四天都“消失”了。 We Are Segment公司已经就这个发现联系了谷歌公司的团队。

    72870

    项目中必须对应的隐性需求-安全漏洞修复

    都是平时开发中需要考虑的。下面稍详细的介绍一下。  1.1.1 文本准入 做业务需求有个常识,对于用户输入的每个字段都需要和产品经理讨论一下:什么类型、长度多少、允许的字符集范围、格式是否合法。...它是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其他用户使用的页面中。...主要类别有: 1>空口令或系统缺省的口令 2>口令长度小于8个字符 3>口令为连续的某个字符或重复的某些字符 4>口令应该为以下四类字符的组合,大写字母、小写字母、数字和特殊字符。...没类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。...6>口令不应该为用数据或符号代替某些字母的单词 7>至少90天内更换一次口令,防止未被发现的入侵者继续使用该口令。     记得很久之前在日本出差的时候,当地人都下班了,我们需要登录系统查看东西。

    49120

    《C++11》深入剖析正则表达式库:解锁文本处理的高效之道

    (二)转义序列在正则表达式中,某些字符具有特殊含义,如上述元字符。当我们需要匹配这些特殊字符本身时,就需要使用转义序列。转义序列以反斜杠\开头,后跟需要转义的字符。例如,要匹配一个实际的点字符....例如,验证用户输入的手机号码是否符合特定国家或地区的格式,如中国的手机号码通常为11位数字,以13、14、15、17、18、19开头,就可以使用正则表达式^1[3-9]\d{9}$来进行验证;验证电子邮件地址的格式是否正确...在这个正则表达式中,\\b表示单词边界,确保电子邮件地址是一个独立的单词;[A-Za-z0-9._%+-]+匹配用户名部分,允许出现字母、数字、点、下划线、百分号、加号和减号;@是电子邮件地址的固定分隔符...捕获组的使用捕获组是正则表达式中一个非常强大的功能,它允许我们将匹配到的子串分组,并在后续操作中引用这些组。捕获组通过圆括号()定义,在匹配结果中可以通过组的索引来访问对应的子串。...在设计正则表达式时,应尽量使其简洁明了,能够准确描述所需的匹配模式,同时避免不必要的复杂性。(二)注意事项特殊字符处理:在正则表达式中,一些特殊字符(如.、*、+、?、[]、()等)具有特殊含义。

    15510

    关于 hashCode() 你需要了解的 3 件事

    这个契约允许不同的对象共享相同的哈希码,例如根据上图中的的描述,“A”和“μ”对象的哈希值就一样。在数学术语中,从对象到哈希码的映射不一定为内射或者双射。...更新:正如 laurent 指出,equalsverifier 是一个强大的工具,它用来验证 hashCode 和 equals 方法的约定。您应该考虑在您的单元测试中使用它。...例如: 安然公司的电子邮件集包含 520,924 封电子邮件。计算电子邮件内容字符串的哈希码时,我发现 50 对(甚至是 2 个三元组)不同的电子邮件有着相同的哈希码。...正如这篇文章指出的,有些类库在不同进程中会返回不同的哈希值,这有的时候会让人困惑。谷歌的 Protocol Buffers 就是一个例子。 因此,你不应该在分布式应用程序中使用哈希码。...在分布式应用中不要使用哈希码 此外,你应该意识到从一个版本到另一个版本哈希码的功能实现可能会更改。因此您的代码不应该依赖于任何特定的哈希码值。例如,你不应该使用哈希码来持久化状态。

    61120
    领券