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

问题描述 投票:1回答:2

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

当前,当我不输入字母字符时,会正确弹出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();
        }
    }
}
android regex firebase firebase-realtime-database
2个回答
1
投票

您可以为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); 
        }
    }
}

0
投票

使用

。getText()。toString()。trim();

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

© www.soinside.com 2019 - 2024. All rights reserved.