【问题标题】:How to validate a jtextfield to accept only pakistan cnic format?如何验证 jtextfield 以仅接受巴基斯坦 cnic 格式?
【发布时间】:2016-01-13 16:44:04
【问题描述】:

我需要通过允许用户根据此格式 12345-1234567-1 仅输入 cnic 编号来验证 JTextField,我正在使用此正则表达式,但它不起作用。 这是我的功能

private void idSearchKeyPressed(java.awt.event.KeyEvent evt) {
    String cnicValidator = idSearch.getText();

    if (cnicValidator.matches("^[0-9+]{5}-[0-9+]{7}-[0-9]{1}$")) {
        idSearch.setEditable(true);
    }
    else {
        idSearch.setEditable(false);
    }        
}

请给我一些指导如何验证我的 jtextfield...谢谢

【问题讨论】:

  • “不工作”它做了什么而不是你期望的?它适用于某些输入吗?
  • [0-9+] 中删除+,除非您确实需要匹配+。您还可以使用\d(在Java 字符串文字中转义为\\d)来匹配数字。
  • 如果用户输入了不匹配的输入,为什么要禁用idSearch,阻止他们更改它?
  • 我的意思是当我运行我的项目时我输入了数字但我的 else 部分正在运行而不是 if 部分...请提供一些代码
  • 我用这个 12345-1234567-1 输入运行了你的程序,正则表达式工作得很好。对于这个输入,如果我将输入值 123-45-1234567-1 更改为真值,我得到了假值。

标签: java swing jframe jtable jtextfield


【解决方案1】:

验证后输入的另一种解决方案是使用JFormattedTextField 结合MaskFormatter 来限制输入的开头。

创建其中之一的代码将类似于以下内容:

import java.text.ParseException;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;

public class Demo {

    public static void main(String[] args){

        final JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final MaskFormatter mask;
        try {
            mask = new MaskFormatter("#####-#######-#");
        } catch (ParseException e) {
            throw new RuntimeException("Invalid format mask specified", e);
        }

        // You can optionally set a placeholder character by doing the following:
        mask.setPlaceholderCharacter('_');
        final JFormattedTextField formattedField = new JFormattedTextField(mask);

        frame.setSize(100, 100);
        frame.add(formattedField);
        frame.setVisible(true);
    }
}

格式掩码# 只接受数字(具体来说,它接受Character.isDigit(char) 返回true 的任何字符),并禁止输入任何非数字。

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 2019-12-21
    • 2014-04-02
    • 2014-10-23
    • 2020-11-07
    • 2012-12-28
    • 2020-05-31
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多