程序开发中经常需要用户输入用户信息或者联系方式,其中有一些数组的格式是固定的,程序处理逻辑也是按照这个格式来实现的,但是由于用户输入的是字符串,其灵活性较大,容易输入格式错误的数据。
例如,用户联系信息的电话号码就是固定格式的数据。本实例将演示如何利用正则表达式来确定电话号码格式是否匹配,实例结果下图所示。在程序中加入该模块可以禁止用户输入错误的电话号码。
设计过程:
1)在项目中添加窗体类CheckPhoneNum。在该窗体类中添加3个文本框,分别用于输入姓名、年龄与电话号码,然后再添加一个“验证”按钮。
2)编写“验证”按钮的事件处理方法,该方法获取用户在文本框中输入的电话号码字符串,然后调用方法check()进行验证,并使用对话框输出验证结果。关键代码如下:
protected void do_button_actionPerformed(ActionEvent e) {
String text = phoneNumField.getText();// 获取用户输入
String info = check(text);// 对输入文本进行IP验证
JOptionPane.showMessageDialog(null, info);// 用对话框输出验证结果
}
3)编写check()方法,该方法用于验证指定的字符串与正确的电话号码格式是否匹配。首先判断字符串是否为空,然后再通过正则表达式对字符串进行验证,并将验证结果作为方法的返回值。关键代码如下:
private String check(String text) {
if(text == null || text.isEmpty()){
return "请输入电话号码!";
}
//定义正则表达式,前3后8,或者前4后8
//例如“027-16816816、0431-12312345”都是合法的电话号码
String regex = "^\\d{3}-?\\d{8}|\\d{4}-?\\d{8}$";
//判断是否为电话号码
if(text.matches(regex)){
return text+"\n是一个合法的电话号码。";
}else{
return text+"\n不是一个合法的电话号码!";
}
}
完整代码如下:
package com.lzw;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class CheckPhoneNum extends JFrame {
private JPanel contentPane;
private JTextField nameField;
private JTextField phoneNumField;
private JTextField ageField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CheckPhoneNum frame = new CheckPhoneNum();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public CheckPhoneNum() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 260, 190);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblip = new JLabel("\u59D3\u540D\uFF1A");
lblip.setBounds(10, 15, 122, 15);
contentPane.add(lblip);
nameField = new JTextField();
nameField.setBounds(80, 10, 141, 25);
contentPane.add(nameField);
JButton button = new JButton("\u9A8C\u8BC1");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setBounds(90, 119, 93, 23);
contentPane.add(button);
JLabel label = new JLabel("\u7535\u8BDD\u53F7\u7801\uFF1A");
label.setBounds(10, 87, 60, 15);
contentPane.add(label);
phoneNumField = new JTextField();
phoneNumField.setBounds(80, 82, 141, 25);
contentPane.add(phoneNumField);
JLabel label_1 = new JLabel("\u5E74\u9F84\uFF1A");
label_1.setBounds(10, 50, 122, 15);
contentPane.add(label_1);
ageField = new JTextField();
ageField.setBounds(80, 45, 141, 25);
contentPane.add(ageField);
}
protected void do_button_actionPerformed(ActionEvent e) {
String text = phoneNumField.getText();// 获取用户输入
String info = check(text);// 对输入文本进行IP验证
JOptionPane.showMessageDialog(null, info);// 用对话框输出验证结果
}
public String check(String text){
if(text == null || text.isEmpty()){
return "请输入电话号码!";
}
// 定义正则表达式
String regex = "^\\d{3}-?\\d{8}|\\d{4}-?\\d{8}$";
// 判断输入数据是否为电话号码
if(text.matches(regex)){
return text + "\n是一个合法的电话号码!";
}else{
return text + "\n不是一个合法的电话号码!";
}
}
}