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

前端之家收集整理的这篇文章主要介绍了邮箱正则表达式优化,避免阻塞前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近在项目中发现一个问题:当客户端调用服务端接口时发现阻塞现象,后来查明竟然是邮箱验证的地方阻塞造成的。由于我原来写的验证邮箱的方式是利用正则表达式验证,这种方法当需要验证的邮箱内容不长时没有问题,如1111111验证可以迅速判断出是非邮箱内容。但当验证内容大于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-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\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})|(0\\d{2}-\\d{8})|(0\\d{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]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$");//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("111111111111111111111111111111111111111111111111111111111"); System.out.println(isMail); boolean isPhone = isPhoneUser("0110-13121639164"); System.out.println(isPhone); boolean isIpv4 = isIpv4("0.255.255.255"); System.out.println(isIpv4); } } 总结:有些小问题可能是处理效率问题,对于正则表达式可以查看一些开源代码利用其给出的方法通常效率较好 原文链接:https://www.f2er.com/regex/359995.html

猜你在找的正则表达式相关文章