最近做项目要求一个表单字段的限制是(3~20个英文(2~6个中文)),之前总是以为一个中文占两个字节,用“字符串”.getByte() 获取长度然后判断,经调试总是出错,后来发现utf-8下一个汉字是占3个字节的,而gb2312下是占两个字节的,所以转换了一下,完美验证。
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;
}