关于compex正则表达式部分的C#电子邮件验证

问题描述 投票:1回答:1

我在带有转义字符的c#上有这个正则表达式

^((?("")("".+?(?<!\\)""@)|(([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]))$

或者这没有逃避角色

^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`{}|~\w])*)(?<=[0-9a-z])@)).{1.64}(?([)([(\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]))$

我希望能够限制@之前的电子邮件的第一部分长度为64个字符。我试着积极向前看,但它没有用。

.net regex
1个回答
1
投票

在每个(?<=^.{1,64}@)之后添加@正面lookbehind。在@之前,它将需要1至64个字符串。

模式字符串看起来像

 ^((?(")(".+?(?<!\\)"@(?<=^.{1,64}@))|(([0-9a-z]((\.(?!\.))|[-!#$%&'*+/=?^`{}|~\w])*)@(?<=[0-9a-z]@)(?<=^.{1,64}@))))(?(\[)(\[(?:\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]))$

regex demo

注意我在(?<=[0-9a-z])之后移动@,同时将@添加到环视中,只有在@已经匹配以简化内部匹配过程时才执行检查。

在逐字字符串文字中使用字符串时,只需将双引号加倍:

var pattern = @"^((?("")("".+?(?<!\\)""@(?<=^.{1,64}@))|(([0-9a-z]((\.(?!\.))|[-!#$%&'*+/=?^`{}|~\w])*)@(?<=[0-9a-z]@)(?<=^.{1,64}@))))(?(\[)(\[(?:\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]))$";
© www.soinside.com 2019 - 2024. All rights reserved.