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


 最近在项目中发现一个问题:当客户端调用服务端接口时发现阻塞现象,后来查明竟然是邮箱验证的地方阻塞造成的。由于我原来写的验证邮箱的方式是利用正则表达式验证,这种方法当需要验证的邮箱内容不长时没有问题,如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);
}
}
总结:有些小问题可能是处理效率问题,对于正则表达式可以查看一些开源代码利用其给出的方法通常效率较好
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值