用户输入验证仅包含字母字符



我希望用户在我的自动完成文本视图中只键入字母字符,并且不允许插入空白字符、数字或符号。

目前,当我不输入字母字符时,Toast 消息会正确弹出,但是当输入正确的输入(Firebase 数据库中的匹配键值(时,它也会弹出。 我想我在这样做时遇到了问题,因为我的 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创建一个函数,该函数将测试输入的有效性并返回truefalse如下所示:

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

,这是我在网站上输入电子邮件地址时发现的事情, 如果你最后有空间,他们的验证似乎不起作用

最新更新