日期:2014-05-20  浏览次数:20767 次

挑战你的正则,看清楚要求再回答
Email格式:a@b.c
其中“a”、“b”、“c”可任意替换,“@”和“.”位置保持不变,如果“b.c”部分是IP地址的话可以使用IP地址。

要求:
1.“a”的长度不超过64个英文字符,“b.c”的长度不超过253个英文字符,“a@b.c”的长度不超过254个英文字符
2.可以使用(a–z, A–Z)
3.可以使用(0-9)
4.可以使用!, #, $, %, &, ', *, +, -, /, =, ?, ^, _, `, {, |, }, ~,(逗号分隔开的字符)
5.字符“.”不能出现在开头和结尾。
6.字符“.”不能连续出现2次,如john..smith@citi.com(不支持)
7.“b.c”部分可以使用IP地址,但是必须用方括号“[”“]”括起来,如john.smith@[192.168.2.1]

各位高手们,开始挑战吧:)

PS:这个正则是我想拓展struts2的验证框架的,是java里面的正则。



------解决方案--------------------
C# code

^(?!\.)((?!\.\.)[a-zA-Z\d!#$%&'*\+\-/=\?^_`\{|\}~.]){1,64}(?<!\.)@(?:\w+\.\w+|\[(([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])\]){1,254}$

------解决方案--------------------
@^(?![.])(?!.*[.]{2,})(?!.*[ ]+)(?=.{7,254}$)(?=[^@]{1,64}@)[-0-9a-zA-Z!#$%&'*+/=?^_`\{|\}~]{1,64}@(?=.{5,253})([-0-9a-zA-Z!#$%&'*+/=?^_`\{|\}~]{2,}|\[[0-9]{1,3}(\.[0-9]{1,3}){3}\])\.([-0-9a-zA-Z!#$%&'*+=?^_`\{|\}~]{2,}|\[[0-9]{1,3}(\.[0-9]{1,3}){3}\])(?<![.])$

根据你的要求,以下不包括

a.b@c.d
a@b.c.d
------解决方案--------------------
表达式:.net下的

C# code
[^.](?:(?(\.\.)(?!)|[\w!#$%&'*+-/=?^_`{|}~])){0,62}[^.]@(?:(?:\[\d{0,3}(\.\d{0,3}){3}\])|[^.](?:(?(\.\.)(?!)|[\w!#$%&'*+-/=?^_`{|}~])){0,252}[^.])

------解决方案--------------------
Java code

String usedChar = "a-zA-Z0-9!#\\$%&'\\*+-/=\\?\\^_\\{\\|\\}~`\\.";
String ip = "\\[((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\]";
String str = "((?=^.{7,254}$)((^[^\\.]["+usedChar+"]{0,63})@((["+usedChar+"]{2,252})\\.(["+usedChar+"]{1,251}[^\\.]$))))|(([^\\.]["+usedChar+"]{0,63})(?<!\\.{2,})@"+ip+"$)";