如何验证JFormattedTextField中是否输入完整的10位电话号码数字
验证带MaskFormatter的电话号码输入完整性
我需要验证用户在电话簿程序中是否输入了完整的10位数字来创建联系人,若未完成输入则弹出错误提示(和姓名为空时的提示一致)。但当前使用MaskFormatter("(###) ###-####")格式化电话号码输入框后,无论输入内容如何,ftf1.getText()返回的字符长度始终是14,无法直接通过长度判断是否输入了全部10位数字。
简便的验证方法
有两种直接有效的方式可以判断用户是否完成了全部数字的输入:
方法1:检查文本中是否存在占位符
MaskFormatter默认用_作为未填充位置的占位符(可通过setPlaceholderCharacter()自定义),只要输入文本中包含占位符,就说明未填完所有数字:
// 初始化时可明确设置占位符(默认即为_,此步骤可选) format1 = new MaskFormatter("(###) ###-####"); format1.setPlaceholderCharacter('_'); // 验证逻辑 String phoneText = ftf1.getText(); boolean isPhoneComplete = !phoneText.contains("_");
方法2:提取数字后检查长度
直接过滤掉输入文本中的非数字字符,判断剩余字符长度是否为10:
String phoneText = ftf1.getText(); // 替换所有非数字字符 String digitsOnly = phoneText.replaceAll("\\D", ""); boolean isPhoneComplete = digitsOnly.length() == 10;
修改后的验证逻辑
将电话号码验证和姓名验证结合,加入到actionPerformed方法中:
@Override public void actionPerformed(ActionEvent e) { TreeMap<String, String> contacts = new TreeMap<String, String>(); if(e.getSource() == createButton) { boolean isNameEmpty = textField.getText().isEmpty(); // 用方法2验证电话号码完整性 String phoneText = ftf1.getText(); String digitsOnly = phoneText.replaceAll("\\D", ""); boolean isPhoneIncomplete = digitsOnly.length() != 10; if(isNameEmpty || isPhoneIncomplete) { JOptionPane.showMessageDialog(frame, "Enter Name & Phone Number.","Contact Creation", JOptionPane.ERROR_MESSAGE); } else { // 执行联系人创建逻辑 contacts.put(textField.getText(), digitsOnly); message.setText("Contact created successfully!"); } } }
补充说明
- 方法1依赖占位符设置,若自定义了占位符字符,需同步修改判断逻辑;
- 方法2通用性更强,无论电话号码格式规则如何调整,只要需要验证10位数字就能直接使用;
ftf1.isEditValid()方法仅判断输入是否符合格式规则,无法识别"已输入部分数字但未填完"的情况,因此不适合用于此场景。
内容的提问来源于stack exchange,提问作者therealslyvegas
相关产品推荐
相关产品推荐

