通過反射獲取類字段並校驗(包括父類字段) public static <T>String[] checkString (Object obj, Class<T> clazz){
String[] result =null;
List<Field> declaredFields = new ArrayList<>() ;
while (clazz != null) {
declaredFields.addAll(Arrays.asList(clazz .getDeclaredFields()));
Class tempClass =clazz.getSuperclass();
clazz = tempClass;
}
try {
for (Field field : declaredFields) {
field.setAccessible(true);
Object o = field.get(obj);
if(o!=null){
if(!LegalStringUtils.isLegal(String.valueOf(o))){
result = ArrayUtils.addAll(result,LegalStringUtils.getIllegalChars((String)o));
}
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return result;
}
private final static String REG_CN_EN_NUMBER = "[\\u4e00-\\u9fa5]|[(A-Za-z)|(0-9)]";
private final static String REG_EN_CHAR = ";'\"|\\/?,.<>[]{}()!-=+- @#$%^&*~`";
private final static String REG_CN_CHAR = ";‘“|、/?,。《》【】{}()!-=+——@#¥%……&*~·";
public static boolean isLegal(String str) {
for (int i = 0; i < str.length(); i++) {
String s = String.valueOf(str.charAt(i));
if (!(s.matches(REG_CN_EN_NUMBER) || REG_EN_CHAR.contains(s) || REG_CN_CHAR.contains(s))) {
return false;
}
}
return true;
}
public static String[] getIllegalChars(String str) {
String results = "";
for (String s : str.split("")) {
if (!(s.matches(REG_CN_EN_NUMBER) || REG_EN_CHAR.contains(s) || REG_EN_CHAR.contains(s))) {
if (results.equals("")) {
results = s;
} else {
results += ("," + s);
}
}
}
return results.split(",");
}