我已经调试了好几个小时并且已经打了一堵墙 - 正则表达式从未成为我的强项。我已经能够改变以下正则表达式以限制域名的255个字符,但是,在尝试限制电子邮件地址的本地/用户名部分时,我遇到了实现64个字符限制的问题。我已经通过regex101替换+ s和* s并试图了解每个传递正在做什么 - 但是,即使我对所有非空格字符添加一个限制为64的检查,似乎其他检查通过并采取优先 - 虽然我不确定。下面是我的正则表达式,目前没有任何64个字符检查,我用它来打破它:
Type type = typeof (ushort);
short num = -100;
ushort num1 = unchecked ((ushort) num); //When type is known. Result 65436
ushort num2 = unchecked(Convert.ChangeType(num, type)); //Need here the same value
到目前为止我可以在http://jsfiddle.net/mtqx0tz1/看到我已经做了其他微小的改动(例如不允许连续的点),但是大多数情况下这个正则表达式来自另一个没有字符限制的叠加帖子。 / p>
最后,我知道这不是'标准'可以这么说,电子邮件是在服务器端检查的,但是,我想比抱歉更安全...以及我的一些工作正则表达式。对不起,如果这个问题不值得一个实际的帖子 - 我只是根本没有看到我的通行证{1,64}失败的地方。在这一点上,我正在考虑将字符串的部分字符串串起来到@符号并以这种方式检查长度...但是将它包含在此语句中会很好,因为所有检查都在此处完成用。
答案 0 :(得分:-2)
我已经使用了这个正则表达式验证,它运行良好。 电子邮件地址位于变量strIn
中try
{
return Regex.IsMatch(strIn,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}