正则表达式 验证邮件地址

不懂正则表达式,所以直接去网上搜现成的正在表达式,结果掉坑里面了

这个是网上找的表达式:

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$

[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?

单元测试的时候没问题,然后Tester跑case时发现“卡死”现象,两个都会卡死

tester输入是:sadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfassfasdfasdfasdfasdfasdfasdadfasdgaewegwegwegwedfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfasdfasdfsadfas

总共255个字符(别纠结没限制输入长度)

于是想,还是算了,自己摸索一下,百度百科邮件地址格式,他这样子说的:

通常电子邮件地址的格式为:[email protected],其中 user 是收件人的用户名,mail.server.name是收件人的电子邮件服务器名,它还可以是域名或十进制数字表示的 IP 地址。

也就是用户名和服务器地址,然后用@隔开,然后下载了一个叫“DEELX正则引擎文档”的文档学习正则表达式写法,文档内容很少,看了基本语法之后,自己定义了匹配规则:

1.用户名第一个字符必须是数字或字母,其他用\w匹配,\w可以匹配任何一个字母或者数字或者下划线

2用户名后必须是@符号

3.@符号后必须是数字或字母字符串,然后字符串可以被小点符号分割,并且相邻字符不能是两个小点

一句话的说关键就是是服务器地址的匹配,将服务器地址拆分成两块mail和.server.name,然后.server.name结构是重复的,可视为小点开头然后接数字或字母的重复结构,然后就很好写表达式了:^[\da-zA-Z][\w]*@[\da-zA-z]+(\.[\da-zA-z]+){1,9}$

棕色:必须以数字或字母开头

红色:匹配任一一个\w

绿色:至少有一个数字或字符

浅青色:是一个子表达式,表示匹配以小点开始并以数字或字母结尾的字符串

紫色:浅青色这个子表达式至少匹配1个,并且最多匹配9个这样的字符串,也就是前面说的重复的结构

然后测试,发现貌似还行

至于不能出现的特殊字符,八度后没发现什么有用信息,就没考虑。

猜你喜欢

转载自www.cnblogs.com/maoyuanwai/p/9636516.html
今日推荐