【问题标题】:Restrict numbers from being entered on an EditText限制在 EditText 上输入数字
【发布时间】:2016-04-12 05:15:40
【问题描述】:

我需要限制用户在 EditText 中输入数字 (0-9),并允许从键盘输入所有其他字符。

以下代码不适用于以下场景。

如果用户输入一个字母,然后输入一个数字,editText 变为空。

InputFilter withoutNumberFilter = 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.isDigit(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};

editText.setFilters(new InputFilter[] { withoutNumberFilter });

【问题讨论】:

  • "以下代码不工作" 怎么不工作?您究竟希望它做什么,而它正在做什么?
  • 它应该允许除 0-9 范围内的数字以外的所有其他字符。它应该允许字母、特殊字符、汉字等

标签: java android


【解决方案1】:

您只需将您的条件更新为:

if (!Character.isLetter(source.charAt(i)))

这应该可以解决问题。

【讨论】:

    【解决方案2】:

    您可以使用isLetter()方法进行比较

    if (!Character.isLetter(source.charAt(i))) {
       return "";
    }
    

    【讨论】:

    • 你不想做!Character.isLetter()吗?
    【解决方案3】:

    只需使用正则表达式替换所有数字:

    source = source.replaceAll("[0-9]","")
    

    如果您想在用户输入输入时执行此操作,则只需在每个操作事件后输入此语句即可。

    【讨论】:

      【解决方案4】:

      扩展你的类可能会帮助并实现一个监听器。然后,您可以在其他表单中重新使用扩展的 JTextField。

      只是一个简单的例子。

      import java.awt.event.KeyEvent;
      import java.awt.event.KeyListener;
      
      import javax.swing.JTextField;
      
      public class MyJTextField extends JTextField implements KeyListener {
      
          public MyJTextField() {
              super();
              addKeyListener(this);
          }
      
          boolean found = false;
      
          @Override
          public void keyPressed(KeyEvent arg0) {
      
              char c = arg0.getKeyChar();
              char[] cs = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
      
              for (int i = 0; i < cs.length; i++) {
                  if (c == cs[i]) {
                      found = true;
                      break;
                  }
              }
          }
      
          @Override
          public void keyReleased(KeyEvent arg0) {
      
              if (found) {
                  String text = getText();
                  setText(text.substring(0, text.length() - 1));
                  found = false;
              }
          }
      
          @Override
          public void keyTyped(KeyEvent arg0) {
              // No action.
          }
      }
      

      欢迎任何其他cmets。

      【讨论】: