如何限制Android EditText字段中的特殊字符?

jckbn6z7  于 2022-11-27  发布在  Android
关注(0)|答案(6)|浏览(163)

如何限制Android EditText字段中的特殊字符?

mzsu5hc0

mzsu5hc01#

您尝试过添加android:digits="abcde.....0123456789"属性吗?虽然android:digits指定它是一个数字字段,但我确实可以将其设置为接受字母和特殊字符(在SDK-7上测试)。
如果这不起作用,那么您必须实现KeyListener,请参阅:(文本方法键监听器)

vwoqyblh

vwoqyblh2#

只需将EditText对象传递给此方法。还要在变量blockCharacterSet中添加要阻止的值。

private void disableSpecialChar(EditText editText) {
      final String blockCharacterSet = "<>";

      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;
       }
      };

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

     }
iklwldmw

iklwldmw3#

我在回答中已经解决了这个问题:Prevent special symbols in EditText。您可以根据需要更改正则表达式。

yr9zkbsy

yr9zkbsy4#

只需将xml行下方放入edittext块中。

android:digits="abc"

这将允许仅输入a、B和c字符。

a5g8bdjr

a5g8bdjr5#

我创建了一个类,以便更灵活地设置EditText的输入约束:
https://github.com/devapro/NumberWatcher
它仅用于数字输入,但您可以为任何类型更改它。

b1zrtrql

b1zrtrql6#

以下是包含空格的Kotlin版本:

private val userNameFilter =
    InputFilter { source, start, end, dest, dStart, dEnd ->
        for (i in start until end) {
            if (!Character.isLetterOrDigit(source[i]) && !Character.isWhitespace(source[i])) {
                return@InputFilter ""
            }
        }
        null
    }

相关问题