C#电子邮件验证在Compex正则表达式部分的长度

时间:2018-08-31 07:58:51

标签: .net regex

我在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个字符。我已经尝试过正面的态度,但是没有用。

1 个答案:

答案 0 :(得分:1)

在每个(?<=^.{1,64}@)之后立即添加@正向后。从@之前的字符串开始需要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]))$";