我正在尝试限制用户输入。如果用户输入连续数字,例如1232334,连续特殊字符,例如!@%$ ^&#@ $ *。但它允许用户输入序数,如第1,第2等。而且它也将允许约翰福音13:12。一节经文。
这就是我尝试过的:(我使用了InputFilter)
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// TODO Auto-generated method stub
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
et.setFilters(new InputFilter[]{filter});
但它不会让我输入特殊字符,它可以接受连续数字。有谁知道如何达到我的要求?非常感谢你。感谢。
答案 0 :(得分:2)
试试这个经过测试的解决方案。
import android.app.Activity;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.Spanned;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText et;
String specialCharSet = "!@%$^&#@$*";
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String tmp;
try {
tmp = (et.getText().toString()).substring(et.getText().toString().length() - 2, et.getText().toString().length());
if (Character.isDigit(tmp.charAt(0)) && Character.isDigit(tmp.charAt(1)) && Character.isDigit(source.toString().charAt(0))) {
return "";
}
if (specialCharSet.contains("" + tmp.charAt(1)) && specialCharSet.contains("" + source)) {
return "";
}
} catch (Exception e) {
if (et.getText().toString().length() >= 1 && specialCharSet.contains("" + et.getText().toString().charAt(0)) && specialCharSet.contains(source)) {
return "";
}
}
return null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.et);
et.setFilters(new InputFilter[] { filter });
}
}
答案 1 :(得分:1)
我建议您通过以下方式更改您的实施:
应该或多或少地做到这一点。几个月前我做过类似的事。如果你很幸运,我可以找到代码并将其粘贴在这里,当我今晚回家时:)但总的来说这应该是非常直接的。如果你不确定source,start,end,dest,dstart和dend的值,请在调试器中检查它们,以便更好地理解。
- 更新 - 好消息是,我在我曾经发布的问题中找到了我的代码;)
public class MoneyFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// The regex to test the string
String testRegex = "^\\d+\\,?\\d{0,2}$";
String s = source.toString();
String d = dest.toString();
// Build the string that would return from the user's input
String r = d.substring(0, dstart) + s.substring(start, end)
+ d.substring(dend);
// And check it
if (r.matches(testRegex)) {
return null;
} else {
return "";
}
}
}
你当然需要不同的正则表达式来匹配字符串,但其余的代码应该可以工作。
希望这有帮助,
的问候,
汉斯