Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EditText可限制输入特殊字符:单引号、双引号和表情符号_Android_Regex_Android Edittext - Fatal编程技术网

Android EditText可限制输入特殊字符:单引号、双引号和表情符号

Android EditText可限制输入特殊字符:单引号、双引号和表情符号,android,regex,android-edittext,Android,Regex,Android Edittext,我在从editText向数据库中插入特殊字符时遇到问题:单引号、双引号和表情符号 我希望我的editText限制这些字符,我成功地限制了表情符号,但我未能限制用户输入单引号和双引号 例如,当我试图将editText中的文本今天的列表输入数据库时,它会生成一个异常 我在editText中使用了InputFilter来过滤表情,我希望这个过滤器也能限制单引号和双引号 public static InputFilter getEditTextFilterEmoji() { return new

我在从editText向数据库中插入特殊字符时遇到问题:单引号、双引号和表情符号

我希望我的editText限制这些字符,我成功地限制了表情符号,但我未能限制用户输入单引号和双引号

例如,当我试图将editText中的文本
今天的列表
输入数据库时,它会生成一个异常

我在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, "");
        }
    };
}
公共静态InputFilter getEditTextFilterEmoji(){
返回新的InputFilter(){
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
CharSequence sourceOriginal=源;
source=replaceMoji(source);
end=source.toString().length();
如果(结束==0)
return“”;//如果输入字符已被删除,则返回空字符串
如果(!sourceOriginal.toString().equals(source.toString())){
char[]v=新字符[结束-开始];
getChars(source、start、end、v、0);
字符串s=新字符串(v);
if(源实例已跨越){
SpannableString sp=新的SpannableString;
TextUtils.copySpansFrom((跨越)源、开始、结束、null、sp、0);
返回sp;
}否则{
返回s;
}
}否则{
返回null;//保持原始状态
}
}
私有字符串替换表情符号(CharSequence源){
字符串notAllowedCharactersRegex=“[^a-zA-Z0-9@\\\\$%\&\-\\+\(\\)\*:!\?\\~\\\\\\\\\\\\\\\\\[\\]=\,\uU/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
返回source.toString()
.replaceAll(不允许字符regex,”);
}
};
}

有人能帮我吗?

如果您只想要edittext中的字母,请在edittext标记中添加这一行

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

将编辑文本限制为仅使用给定数字

            <EditText
            ........
            android:inputType="textPersonName"
            android:digits="aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyY zZ0123456789"
            />

将其添加到Strings.xml中。它允许您输入字母数字和空格

<string name="charset">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY Z</string>
0123456789ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ

试试这个……对我有用

private EditText InputText;
private String blockCharacterSet = "~#^|$%&*!"; //Special characters to block

private InputFilter filter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        if (source != null && blockCharacterSet.contains(("" + source))) {
            return "";
        }
        return null;
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    InputText = (EditText) findViewById(R.id.InputText);
    InputText.setFilters(new InputFilter[] { filter });
}
这对我很有效。我搜索了不同的问题,得到了我的答案。

setFilters(newinputfilter[]{newemojiexcludefilter()}); 私有类EmojiExcludeFilter实现InputFilter{

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        String specialChars = "/*!@#$%^&*()\"{}_[]|\\?/<>,.:-'';§£¥...";
        for (int i = start; i < end; i++) {
            int type = Character.getType(source.charAt(i));
            if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL || type == Character.MATH_SYMBOL || specialChars.contains("" + source)||  Character.isWhitespace(0)) {
                return "";
            }
        }
        return null;
    }
}
@覆盖
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
字符串specialChars=“/*!@$%^&*()\”{}\u[]\ 124;\?/,.:-“”;§§;
for(int i=start;i
据我所知,所有表情符号都包含/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;
    }};
}

我不想我的编辑文本采取单引号,双引号和表情。顺便说一下,我必须从这里访问这个“字符集”。你能给我看一个演示吗?是的,使用上面的代码可以防止使用单引号、双引号和表情符号。使用此属性编辑text-android:digits=“@string/charset”android:inputType=“textFilter”我希望它也能用于空格。它限制我进入空间,在Z前添加空间,可能复制的副本,如果它帮助的话,考虑选择一个答案。我的编辑文本也需要占用空间,那个代码限制我进入空间。检查我在Z之前添加了一个空间。它允许你放置空间它会占用空间,我在Z中提供了空间。请参见代码。
editext.setFilters(getEmojiFilter("'\"\\//\\u"));