gpt4 book ai didi

java - 使用正则表达式验证 EditText 中的 [Preference] 文件名

转载 作者:行者123 更新时间:2023-12-01 12:25:02 26 4
gpt4 key购买 nike

[第一个应用程序]我为用户提供了使用不同首选项文件拥有多个配置文件的选项。用户可以自己命名他们的个人资料。我制作了一个自定义对话框,将文件名作为编辑文本中的输入。有效的文件名应仅包含 [A-Z、a-z、0-9、_、-]。我正在让用户了解此限制。

每当用户输入无效字符时,我希望该字符从编辑文本中删除,并最好显示一个 toast。经过简短的搜索后,我相信使用正则表达式可以轻松执行此任务(与我在 edittext 上使用 textwatcher 的基于字符串的简单方法相比)。但是,我以前从未使用过正则表达式,因此需要有关此方面的帮助。

ps - 一个令人担忧的用例是当用户发狂并在编辑文本中键入随机字符时。

最佳答案

这是上述特定场景的工作代码,我们将文本观察器附加到我们的编辑文本,然后使用模式验证输入(Thnaks to huidube):

    profile_name.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

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

@Override
public void afterTextChanged(Editable s) {
String str = s.toString();
if (!(str.matches("[a-zA-Z0-9-_ ]*"))) {
str = removeIllegalChar(str).trim(); //trim whitespaces
profile_name.setText(str);
profile_name.setSelection(str.length()); //use only if u want to set cursor to end
}
}
});

private String removeIllegalChar(String str) {
for (int i=0; i < str.length(); i++) {
if (!(String.valueOf(str.charAt(i)).matches("[a-zA-Z0-9-_ ]*"))) {
//as the callback is called for each character entered, we can return on first non-match
//maybe show a short toast
return str.substring(0, i) + str.substring(i+1);
}
}
return str;
}

我有两台测试设备,一台是垂死的退伍军人,另一台是 Moto G,上述过程在两台设备上都能顺利运行。所以,我想这是可以接受的最佳选择。

关于java - 使用正则表达式验证 EditText 中的 [Preference] 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434342/

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