加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

邮箱正则表达式优化,避免阻塞

发布时间:2020-12-14 01:00:20 所属栏目:百科 来源:网络整理
导读:最近在项目中发现一个问题:当客户端调用服务端接口时发现阻塞现象,后来查明竟然是邮箱验证的地方阻塞造成的。由于我原来写的验证邮箱的方式是利用正则表达式验证,这种方法当需要验证的邮箱内容不长时没有问题,如2222211验证可以迅速判断出是非邮箱内容。
最近在项目中发现一个问题:当客户端调用服务端接口时发现阻塞现象,后来查明竟然是邮箱验证的地方阻塞造成的。由于我原来写的验证邮箱的方式是利用正则表达式验证,这种方法当需要验证的邮箱内容不长时没有问题,如2222211验证可以迅速判断出是非邮箱内容。但当验证内容大于50个字符(同时不是邮箱)时就出现了阻塞现象。我通过查看jquery对于邮箱的验证发现,邮箱的正则表达式是利用unicode代替字符的,利用这种方式就可以验证长度问题了 好下面我给出一个简单的测试用例 /**验证工具*/ public class RegexUtil { /** * 规范的校验邮箱的方法 * @param needEmail * @return */ public static boolean isEmailUser(String needEmail){ // Pattern pattern = Pattern.compile("^s*w+(?:.{0,1}[w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*.[a-zA-Z]+s*$" ); Pattern pattern = Pattern.compile("^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(\([x01-x09x0bx0cx0d-x7f]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])))$"); Matcher matcher = pattern.matcher(needEmail); return matcher.matches(); } /**是否是手机用户*/ public static boolean isPhoneUser(String userName){ Pattern pattern = Pattern.compile("^([0][0-9]{2,3}-)?(((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))d{8})|(0d{2}-d{8})|(0d{3}-d{7})$"); //"^((13[0-9])|(15[^4,D])|(18[0,5-9]))d{8}$" Matcher matcher = pattern.matcher(userName); return matcher.matches(); } /**验证IpV4*/ public static boolean isIpv4(String ipV4){ Pattern pattern = Pattern.compile("^(25[0-5]|2[0-4]d|[01]?dd?).(25[0-5]|2[0-4]d|[01]?dd?).(25[0-5]|2[0-4]d|[01]?dd?).(25[0-5]|2[0-4]d|[01]?dd?)$");//jquery给出的表达式 ///^(([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5]).)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){2}([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/ Matcher matcher = pattern.matcher(ipV4); return matcher.matches(); } public static void main(String[] args) { boolean isMail = isEmailUser("222222222222222222222222222222222222222222222222222222211"); System.out.println(isMail); boolean isPhone = isPhoneUser("0110-13121639164"); System.out.println(isPhone); boolean isIpv4 = isIpv4("0.255.255.255"); System.out.println(isIpv4); } } 总结:有些小问题可能是处理效率问题,对于正则表达式可以查看一些开源代码利用其给出的方法通常效率较好

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读