Aurelia 电子邮件验证通过,无需域扩展

Aurelia 电子邮件验证通过,无需域扩展,aurelia,Aurelia,我正在我的项目中使用Aurelia验证,并尝试验证电子邮件地址。当我添加电子邮件example@g,它通过了验证。电子邮件验证是否应该在末尾使用.com、.net等扩展名来通过验证?以链接为例 以下是我的意思的截图: 使用以下代码更改了我的验证规则: 原始代码: ValidationRules.ensure('setEmail') .displayName('Email') .required() .email() .on(this); 使用匹配模式修改代码:

我正在我的项目中使用
Aurelia验证
,并尝试验证电子邮件地址。当我添加电子邮件
example@g
,它通过了验证。电子邮件验证是否应该在末尾使用
.com
.net
等扩展名来通过验证?以链接为例

以下是我的意思的截图:


使用以下代码更改了我的验证规则:

原始代码:

ValidationRules.ensure('setEmail')
    .displayName('Email')
    .required()
    .email()
    .on(this);
使用匹配模式修改代码:

ValidationRules.ensure('setEmail')
    .displayName('Email')
    .required()
    .email()
    .matches(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/)
    .on(this);
请参见屏幕截图:

无效:

有效:


这有点吹毛求疵,但正如emix在评论中已经指出的那样,
aurelia validation
使用的验证正则表达式是当前被广泛接受的标准,正如。这与和上记录的正则表达式相同

似乎至少在验证
input type=“email”
时遵循了此规范。不过,我在chrome或edge上找不到任何官方来源

该正则表达式的JavaScript版本为:

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
简单来说,这意味着:

  • (必需)在
    @
    符号之前,输入任意数量的字母数字字符和(某些)符号
  • (必需)在
    @
    符号后,1到63个字母数字字符或连字符(不能以连字符开头或结尾)
  • (可选)与2相同(但以句点开头),重复任意次数
  • 如果要将此验证限制为可在internet上路由的电子邮件,只需将正则表达式末尾的星号
    *
    更改为加号
    +
    。这使正则表达式保持相同,但现在必须至少有一个以句点开头的段

    /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/
    

    在最新版本中,我认为我们可以使用
    Validators.pattern(REGEX\u VALID\u EMAIL)
    而不是
    formControl
    验证器中的
    Validators.EMAIL

    REGEX\u VALID\u电子邮件可以是以下内容

    const REGEX_VALID_EMAIL = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/
    ;
    

    可以说,这是一封有效的电子邮件。有人总是可以添加“真实”的电子邮件,比如
    nice。girl@gmajl.com
    ,但这并不意味着它也是有效的电子邮件(域MX中的有效帐户)。因此,您必须澄清您真正想要的验证类型
    g
    可能无法在Internet上路由,但可以在Intranet中路由。谢谢。这是有道理的。我添加了匹配模式,解决了我的问题。