Проверка электронной почты проходит без расширения домена - PullRequest
0 голосов
/ 26 апреля 2018

Я использую Aurelia-Validation в своем проекте и пытаюсь подтвердить адрес электронной почты. Когда я добавляю письмо example@g, оно проходит проверку. Разве проверка электронной почты не должна иметь расширение .com, .net и т. Д. В конце, чтобы пройти проверку? См. Пример plunker .

Вот скриншот, чтобы показать, что я имею в виду:

2018-04-25 10_09_35-plunker

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Это немного придирчиво, но, как уже упоминалось в emix, регулярное выражение валидации, используемое aurelia-validation, в настоящее время является широко принятым стандартом, как определено WHATWG . Это то же регулярное выражение, что описано в MDN и w3.org .

Mozilla , кажется, следует этой спецификации для проверки 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. (обязательно) перед символом @, любым количеством буквенно-цифровых символов и (определенных) символов
  2. (обязательно) после символа @, от 1 до 63 буквенно-цифровых символов или дефисов (и не может начинаться или заканчиваться дефисом)
  3. (необязательно) то же, что 2 (но начинается с точки), повторяется любое количество раз

Если вы хотите ограничить эту проверку сообщениями электронной почты, которые маршрутизируются в Интернете, просто измените звездочку * в конце регулярного выражения на плюс +. Это делает регулярное выражение идентичным, за исключением того, что теперь должен быть хотя бы один сегмент, начинающийся с точки.

/^[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])?)+$/
0 голосов
/ 26 апреля 2018

Внесены изменения в мое правило проверки с кодом ниже:

Оригинальный код:

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);

Смотрите скриншот:

Invalid:

enter image description here

Действительно:

enter image description here

...