Долго неверный сбой ввода - Угловая проверка формы - PullRequest
0 голосов
/ 04 мая 2018

У меня есть вход с валидатором шаблона электронной почты. (регулярное выражение ^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$)

Если я наберу длинное недействительное письмо, форма вылетит. Удивительно, но он будет хорошо работать при длительном действительном вводе.

Кто-нибудь испытывал это раньше? Пожалуйста, поделитесь своим решением, если у вас есть.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 мая 2018

Попробуйте это: ^\w+(?:[\.-]\w+)*@\w+(?:[\.-]\w+)*(?:\.\w{2,3})+$

Крушение связано с эффективностью вашего регулярного выражения. В частности, те ? после [\.-] являются ненужными и вызывают намного больше повторений, чем необходимо. Некоторые регулярные выражения хорошо работают с соответствующими решениями, но катастрофически возвращаются назад , когда представлены строки, которая не соответствует.


Редактировать: Эти два других решения не будут работать для Angular, потому что это регулярное выражение Javascript, но они все еще полезны для общего ознакомления.

Лучший, используя притяжательные квантификаторы : ^\w++(?:[\.-]\w++)*@\w++(?:[\.-]\w++)*(?:\.\w{2,3})+$

2-е место, с атомными группами : ^(?>\w+)(?:[\.-](?>\w+))*@(?>\w+)(?:[\.-](?>\w+))*(?:\.\w{2,3})+$

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...