Javascript中的电子邮件验证-如何添加额外条件

Javascript中的电子邮件验证-如何添加额外条件,javascript,email-validation,Javascript,Email Validation,我需要验证电子邮件地址,除了基本结构之外,我还需要 电子邮件地址不能以特殊字符开头或结尾 电子邮件地址不能有双重特殊字符 编辑 特殊字符是 !#$%&'*+-/=?^`{|}~ 性格。(句点、句点或句号)前提是它不是第一个或最后一个字符,并且不会一个接一个出现 这就是我到目前为止所做的,它只是验证了基本结构 function emailIsValid (email) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) } 如何添加上述

我需要验证电子邮件地址,除了基本结构之外,我还需要

  • 电子邮件地址不能以特殊字符开头或结尾

  • 电子邮件地址不能有双重特殊字符 编辑 特殊字符是

    !#$%&'*+-/=?^`{|}~

性格。(句点、句点或句号)前提是它不是第一个或最后一个字符,并且不会一个接一个出现

这就是我到目前为止所做的,它只是验证了基本结构

function emailIsValid (email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)
}
如何添加上述两个条件?多谢各位

编辑 有效地址

jen@gmail.com
jen@company.gov.ca
jen.doe@gmail.com
jen123@gmail.com
无效

@jen@gmail
jen@gmail
.jen@gmail.com
jen.@gmail.com
&jen@gmail.com
jen@gmail.com.

你有三个选择

  • 不用麻烦验证电子邮件地址。
  • 这可能是最好的选择。最终,知道电子邮件地址是否合法的唯一方法是向该地址发送一段唯一数据,并指示用户与您共享该唯一数据,以证明他们可以访问邮箱(从而证明邮箱存在,从而证明其地址合法)

    我不希望你听从这个建议

  • 在正则表达式之后添加额外条件。
  • 你知道,你不必用一个正则表达式来完成整个工作。这样做实际上会更加困难

    既然您已经提供了列表,下面尝试一下策略2:

    常量禁止\u终端\u字符=[
    `!`,
    `#`,
    `$`,
    `%`,
    `&`,
    `'`,
    `*`,
    `+`,
    `-`,
    `/`,
    `=`,
    `?`,
    `^`,
    `_`,
    “`',//勾号周围的单引号
    `{`,
    `|`,
    `}`,
    `~`
    ]
    功能emailIsValid(电子邮件){
    让syntaxGood=/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(电子邮件)
    if(!syntaxGood)返回false//如果我们已经失败,则跳过循环
    for(让badChar成为禁止的\u终端\u字符){
    if(email.startsWith(badChar)| | email.endsWith(badChar)){
    return false//提前终止
    }
    }
    返回真值
    }
    
    这可能是你的第二个最佳选择

  • 将所有这些额外的逻辑塞进一个正则表达式。
  • 这是个坏主意。正则表达式有时被戏称为“只写”:唯一能理解正则表达式的人就是编写它的人,甚至只有在他们积极创建它的时候。一旦它出现在后视镜中,他们就会忘记所有毛茸茸的背景细节,甚至对他们来说也变得不透明。如果您想在禁用字符列表中添加或删除一个字符,那么未来试图修改此正则表达式的维护人员祝您好运。如果您没有一套非常健壮的自动测试用例来实现这个功能,那么将来的每一次编辑都可能会破坏一些东西


    如何对正则表达式进行编码的细节将取决于特定的禁止字符列表。因此,如果您希望So上的任何人尝试该代码,您必须提供完整的列表。

    什么是特殊字符?@jabaa编辑,谢谢!您的验证未找到所有有效地址:根据
    “@example.org
    是有效的电子邮件地址。如果您不支持官方RFC,您应该描述支持的模式。如果您要求使用正则表达式解决方案,那么您应该包括示例输入和预期结果(通过/失败)。请参阅:@JDB done!添加了一些示例,如选项2。我同意你的观点,但我的老板希望得到客户的认可,所以。。。