将验证正则表达式的C#电子邮件转换为可在TypeScript中使用的正则表达式

时间:2019-06-26 08:23:35

标签: javascript c# regex typescript

我正在调用的.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文档here中的建议。

我现在想在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)

如何解决无效的组错误,以便可以在服务器端和客户端使用相同的正则表达式?我知道验证电子邮件地址的一般陷阱,以及为什么可以将其视为一个坏主意,但前提是我必须实现与服务器端相同的检查客户端。

编辑

通过https://regex101.com/进行上述操作,我看到:“前面的标记不可量化”,指的是第一个和最后一个问号。

0 个答案:

没有答案