最近作項目要求一個表單字段的限制是(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; }