我希望用户在我的自动完成文本视图中仅输入字母字符,并且不允许插入空白字符,数字或符号。
当前,当我不输入字母字符时,会正确弹出Toast消息,但是当输入正确的输入(firebase数据库中的匹配键值)时,也会弹出Toast消息。我认为我在执行此操作时遇到问题,因为我的if语句当前处于for循环中,该循环重申了我的firebase数据库中的每个键值(为使函数正常工作,我必须这样做)。在这种情况下,用户输入验证是否仍然可以解决任何问题?
public void onClick(View v) {
for (final DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
source = textView.getText().toString();
if (source.equals(childSnapshot.getKey())) {
GlideApp.with(Translate.this).load(childSnapshot.getValue(String.class)).placeholder(R.drawable.ic_launcher_background).into(imageView);
} else if(!source.equals(!source.equals("[0-9]+")) {
Toast.makeText(Translate.this, "No number", Toast.LENGTH_SHORT).show();
} else if(source.equals("[a-zA-Z_]+")) {
Toast.makeText(Translate.this, "Invalid text", Toast.LENGTH_SHORT).show();
}
}
}
您可以为regex
创建一个函数,该函数将测试输入的有效性并返回true
或false
,如下所示:
private boolean isValidInput(String someText) {
Pattern p = Pattern.compile("^([a-zA-Z]+)$");
Matcher matcher = p.matcher(someText);
if(matcher.find())
return true;
return false;
}
然后像这样使用它:
public void onClick(View v) {
source = textView.getText().toString().trim();
if( !isValidInput(source) ) {
Toast.makeText(Translate.this, "Invalid input. Please use alpabetical characters.", Toast.LENGTH_SHORT).show();
return;
}
for (final DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
if (source.equals(childSnapshot.getKey()) ) {
GlideApp.with(Translate.this).load(childSnapshot.getValue(String.class)).placeholder(R.drawable.ic_launcher_background).into(imageView);
}
}
}
使用
。getText()。toString()。trim();
,这是我在网站上输入电子邮件地址时发现的,如果您最后有空间,则他们的验证似乎不起作用