swe*_*man 3 regex android android-edittext
我在从editText 将特殊字符插入数据库时遇到问题:单引号、双引号和表情符号。
我希望我的 editText 限制这些字符,并且我成功地限制了表情符号,但我未能限制用户输入单引号和双引号。
例如,当我尝试将Today's ListeditText 中的文本输入数据库时,它会生成异常。
我在 editText 中使用 InputFilter 来过滤表情符号,我希望这个过滤器也限制单引号和双引号。
public static InputFilter getEditTextFilterEmoji() {
return new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
CharSequence sourceOriginal = source;
source = replaceEmoji(source);
end = source.toString().length();
if (end == 0)
return ""; //Return empty string if the input character is already removed
if (!sourceOriginal.toString().equals(source.toString())) {
char[] v = new char[end - start];
TextUtils.getChars(source, start, end, v, 0);
String s = new String(v);
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(s);
TextUtils.copySpansFrom((Spanned) source, start, end, null, sp, 0);
return sp;
} else {
return s;
}
} else {
return null; // keep original
}
}
private String replaceEmoji(CharSequence source) {
String notAllowedCharactersRegex = "[^a-zA-Z0-9@#\\$%\\&\\-\\+\\(\\)\\*;:!\\?\\~`£\\{\\}\\[\\]=\\.,_/\\\\\\s'\\\"<>\\^\\|÷×]";
return source.toString()
.replaceAll(notAllowedCharactersRegex, "");
}
};
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我这个 ?
根据我的理解,所有表情符号都包含 /u 所以我是这样使用的
public static InputFilter[] getEmojiFilter(String blockChars) {
return new InputFilter[]{(source, start, end, dest, dstart, dend) -> {
String source1= StringEscapeUtils.escapeJava(source.toString());
for (int i = start; i < end; i++) {
if (source != null && blockChars.contains("" + source1.charAt(i))) {
return source.subSequence(start, i);
}
}
return null;
}};
}
Run Code Online (Sandbox Code Playgroud)
并在下面为 Edittext 写下一行
editext.setFilters(getEmojiFilter("'\"\\//\\u"));
Run Code Online (Sandbox Code Playgroud)