最近作项目要求一个表单字段的限制是(3~20个英文(2~6个中文)),以前老是觉得一个中文占两个字节,用“字符串”.getByte() 获取长度而后判断,经调试老是出错,后来发现utf-8下一个汉字是占3个字节的,而gb2312下是占两个字节的,因此转换了一下,完美验证。java
public static final boolean checkUserName(String name) { // char [] charArr = name.toCharArray(); int a = 0; try { a = name.getBytes("gb2312").length; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (a > 2 && name.getBytes().length < 21) { Pattern pattern = Pattern.compile("^[a-zA-Z\\u4e00-\\u9fa5][\\u4e00-\\u9fa5\\w\\.-]*$"); Matcher matcher = pattern.matcher(name); if (!matcher.find()) { return false; } return true; } return false; }