Преобразование электронного письма, проверяющего регулярное выражение C #, в такое, которое работает в TypeScript - PullRequest
1 голос
/ 26 июня 2019

.NET API, который я вызываю, использует следующее регулярное выражение для проверки адресов электронной почты:

var isValidFormat = Regex.IsMatch(_emailAddress,@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));

Это пришло из предложения в документации Microsoft здесь .

Теперь я хочу реализовать ту же проверку на стороне клиента в моем коде TypeScript, но я пытаюсь настроить регулярное выражение на то, которое будет работать в JS. Взять версию без двойных кавычек и избежать одиночной кавычки с обратной косой чертой следующим образом ...

^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&\'\*\+/=\?\^`{}|~\w])*)(?<=[0-9a-z])@))(?([)([(\d{1,3}.){3}\d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$

... и работать через отладчик Chrome, это не радует:

ERROR SyntaxError: Invalid regular expression: /^(?(")(".+?(?<!\)"@)|(([0-9a-z]((.(?!.))|[-!#$%&'*+/=?^`{}|~w])*)(?<=[0-9a-z])@))(?([)([(d{1,3}.){3}d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$/: Invalid group
at new RegExp (<anonymous>)
(remainder of call stack omitted)

Как я могу устранить ошибку недопустимой группы, чтобы я мог использовать одно и то же регулярное выражение как на стороне сервера, так и на стороне клиента? Мне известны общие проблемы с проверкой адресов электронной почты и почему это можно считать плохой идеей, но требуется, чтобы я реализовал ту же проверку на стороне клиента, что и на стороне сервера.

EDIT

Выполнение вышеупомянутого через https://regex101.com/, Я вижу: «Предыдущий токен не поддается количественной оценке» со ссылкой на первый и последний вопросительные знаки.

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