我正在调用的.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/进行上述操作,我看到:“前面的标记不可量化”,指的是第一个和最后一个问号。