et_real_name.setFilters(new InputFilter[]{new InputChineseFilter(6)});
class InputChineseFilter implements InputFilter {
private final int mMax;
public InputChineseFilter(int max) {
mMax = max;
}
/**
*
* @param source 新输入的字符串
* @param start 新输入的字符串起始下标,一般为0
* @param end 新输入的字符串终点下标,一般为source长度-1
* @param dest 输入之前文本框内容
* @param dstart 原内容起始坐标,一般为0
* @param dend 原内容终点坐标,一般为dest长度-1
* @return
*/
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
int newSize = source.length();
if(!StringUtil.checkNameChese(source.toString())){
ToastUtil.show("姓名必须为中文");
return "";
}
int destSize = dest.length();
if(destSize >= mMax){
return "";
} else if(newSize + destSize > mMax){
return source.subSequence(0, mMax - destSize);
} else {
return null;//为source源数据
}
}
}
工具类
/**
* 检测String是否全是中文
*
* @param name
*/
public static boolean checkNameChese(String name) {
boolean res = true;
char[] cTemp = name.toCharArray();
for (int i = 0; i < name.length(); i++) {
if (!isChinese(cTemp[i])) {
res = false;
break;
}
}
return res;
}
/* 判定输入的是否是汉字
*
* @param c 被校验的字符
* @return true代表是汉字
*/
public static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}