前端之家收集整理的这篇文章主要介绍了
邮箱正则表达式优化,避免阻塞,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近在项目中发现一个问题:当客户端
调用服务端接口时发现阻塞现象,后来查明竟然是邮箱验证的地方阻塞造成的。由于我原来写的验证邮箱的方式是利用正则表达式验证,这种
方法当需要验证的邮箱
内容不长时没有问题,如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); } } 总结:有些小问题可能是处理效率问题,对于正则表达式可以查看一些开源
代码利用其给出的
方法通常效率较好