【问题标题】:Blocking certain punctuations from editText?阻止editText中的某些标点符号?
【发布时间】:2014-02-18 17:48:19
【问题描述】:

我想阻止用户在 editText 框中输入某些标点符号。例如,如果他们使用“!”或者 ';'当他们单击“完成”按钮时,他们会收到一个 toast 以提醒他们不要使用它,但如果他们使用其他标点符号,例如逗号或句点,那很好。

这里的大多数代码都是如何交换或删除的,但我并没有真正看到用于检测的代码...如何创建代码来检测 editText 框中的这些特定标点符号?

提前致谢!

【问题讨论】:

标签: android regex android-edittext punctuation


【解决方案1】:
if(yourText.matches("[^;]+[^!]")){
    //Show the toast here
}

if(yourText.indexOf("!") != -1 || yourText.indexOf(";") != -1){
    //Show the toast here
}

作为参考,我创建了这个 JSFiddle,但这是 javascript。

【讨论】:

  • 您好,感谢您的回复!但是它说这部分的“无效字符常量”....:'[^;]+[^!]'
  • 谢谢!我现在无法让它工作......但也许因为我需要睡觉......我会再试一次,谢谢
  • 但是,如果您觉得这些答案对您有帮助,您可以接受其中任何一个,至少要注意他们为您提供帮助的努力。
【解决方案2】:

一个简单的解决方案是将android:digits 属性添加到布局xml 文件中的<EditText> 添加所有允许的字符,例如。

 android:digits="ABCDE....Zabcde.....z012345789#$%^&*" 

Android 将阻止输入任何未在android:digits 中列出的字符。

上面提到的其他解决方案更优雅,但您需要对所有这些解决方案都使用正则表达式。

【讨论】:

  • 这也很好,虽然我仍在尝试哪个可能是最好的解决方案,谢谢!
【解决方案3】:

你应该使用输入过滤器

 InputFilter filter = new InputFilter() { 
    public CharSequence filter(CharSequence source, int start, int end, 
 Spanned dest, int dstart, int dend) { 
            for (int i = start; i < end; i++) { 
                    if (!Character.isLetterOrDigit(source.charAt(i))) { 
                            return ""; 
                    } 
            } 
            return null; 
    } 
 }; 

 edit.setFilters(new InputFilter[]{filter}); 

找到此代码..

【讨论】:

  • 嗯...这是否允许我选择一些标点符号而不是其他标点符号?我会把它们放在哪里?
  • 这是您要检查某些标点符号的地方: //disallow ?和 .. 你可以放任何你想要的东西。 if(source.charAt(i) == '?' || source.charAt(i) == "") { return ""; } if (!Character.isLetterOrDigit(source.charAt(i))) { return ""; }
  • 谢谢,我还在尝试看看哪一个最适合我:)
【解决方案4】:

您可以使用TextWatcher,这是一个使用示例:

mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                // TODO Auto-generated method stub
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {

                // TODO Auto-generated method stub
            }
        });

【讨论】:

  • 我不太明白... >_
  • 在 onTextChanged 事件中,添加将检查字符串中是否存在字符的逻辑,并在必要时显示 Toast。请阅读我链接到的文档以获取有关传递给事件处理程序的参数的更多信息。
【解决方案5】:

在您的情况下,InputFilter 是一个更好的解决方案,因为您可以一次编写所有限制并在多个地方使用它,任意数量的 EditTexts。

请看下面:

 InputFilter[] filters = new InputFilter[1];
 filters[0] = new InputFilter(){
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    if (end > start) {

        char[] acceptedChars = new char[]{'!',';'};

        for (int index = start; index < end; index++) {                                         
            if (new String(acceptedChars).contains(String.valueOf(source.charAt(index)))) { 
                //Do your thing; 
            }               
        }
    }
    return null;
}

};
searchEdit.setFilters(filters);

来源: How to restrict Edittext to some particular characters in android?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多