gpt4 book ai didi

java - 使用 TextWatcher 进行 EditText 验证

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:36 24 4
gpt4 key购买 nike

我有一个带有 EditText 和一个按钮的对话框。此 EditText 将命名我将创建的数据库表,因此对其进行验证至关重要。所以我想提出两个问题:

1) 这很简单,但我找不到任何地方:数据库表名可以接受哪些字符?它可以接受数字吗?数字可以作为第一个字符吗?

2) 我已经设法使用 TextWtacher 验证了 EditText。这是代码:

et_name.addTextChangedListener(new TextWatcher() {

public void afterTextChanged(Editable s) {

String filtered_str = s.toString();

if (filtered_str.matches(".*[^a-z^0-9].*")) {

filtered_str = filtered_str.replaceAll("[^a-z^0-9]", "");

s.clear();

// s.insert(0, filtered_str);

Toast.makeText(context,
"Only lowercase letters and numbers are allowed!",
Toast.LENGTH_SHORT).show();

}

}

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

public void onTextChanged(CharSequence s, int start, int before, int count) {}
});

目前,如果用户插入除小写字母和数字以外的任何字符,文本框将被清除。如果我取消注释 s.insert(0, filtered_str); 以便用过滤后的字符串替换 EditText,我的应用程序会挂起。猜猜我在调试中发现了什么?

错误/安卓运行时(2454):java.lang.StackOverflowError =D

问题是……如何替换 s 文本?

-> s.replace(0, s.toString().length(), filtered_str);(当然删除 s.clear)似乎也不起作用。

最佳答案

private TextWatcher listenerTextChangedFiltro = new TextWatcher() {
public void afterTextChanged(Editable editable) {

final String textoFiltrado = StaticString.filterTextCustom(String.valueOf(editable.toString().toLowerCase()));
if (!textoFiltrado.equals(editable.toString().toLowerCase())) {
editable.clear();
editable.append(textoFiltrado);
}
}
};

关于java - 使用 TextWatcher 进行 EditText 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com