validation只允许在android中编辑文本中的数字和字符

在我的应用程序中,我必须validationedittext。 它应该只允许字符,数字,下划线和hypen。

这是我的代码:

edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // validation codes here location_name=s.toString(); Toast.makeText(getApplicationContext(),location_name, Toast.LENGTH_SHORT).show(); if (location_name.matches(".*[^az^0-9].*")) { location_name = location_name.replaceAll("[^az^0-9]", ""); s.append(location_name); s.clear(); Toast.makeText(getApplicationContext(),"Only lowercase letters and numbers are allowed!",Toast.LENGTH_SHORT).show(); } } }); location.add(location_name); 

在这里,当我在edittext中输入输入时,应用程序被强制关闭。请给我一个建议。谢谢。

Android中有一些非常简单的东西,而不是使用“手动”检查方法。

 InputFilter filter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start;i < end;i++) { if (!Character.isLetterOrDigit(source.charAt(i)) && !Character.toString(source.charAt(i)).equals("_") && !Character.toString(source.charAt(i)).equals("-")) { return ""; } } return null; } }; edittext.setFilters(new InputFilter[] { filter }); 

或者另一种方法:在创建EditText的XML中设置允许的字符:

  
  

除了避免之外,上述代码还将包括使用以下代码

  

这可能很有用,特别是如果你的EditText应该允许变音符号 (在我的例子中, 葡萄牙语变音符号 ):

  

尝试这个:

 public static SpannableStringBuilder getErrorMsg(String estring) { int ecolor = Color.BLACK; // whatever color you want ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); return ssbuilder; } 

如果你想要显示’只允许字母和数字’,请将setError()为EditText,如下所示。

 etPhone.setError(getErrorMsg("Only lowercase letters and numbers are allowed!")); 

希望这会帮助你。 我在我的应用程序的EditText中使用相同的validation检查。

请尝试添加android:digits =“abcde ….. 012345789”属性? 虽然android:digits指定它是一个数字字段,但它确实可以将它设置为接受字母,以及特殊字符(在SDK-7上测试)

类似于android:digits="0123456789*"的解决方案是使用这个:

 EditText etext = new EditText(this); etext.setKeyListener(new DigitsKeyListener().getInstance("0123456789*")); 

另外一个好处是它还会显示数字键盘。

使用这个2function

 public static boolean isdigit(EditText input) { String data=input.getText().toString().trim(); for(int i=0;i 

在这些函数中传递Edittextvariables..所以你可以有布尔值。