java正则表达式 程序例子_Java正则表达式基础知识及实例说明

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

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;

public class RegexStringTest extends JFrame

{

private static final long serialVersionUID = -1564020173888781534L;

private JTextField phoneTextField;

private JTextField zipTextField;

private JTextField addressTextField;

private JTextField firstTextField;

private JTextField lastTextField;

private JTextField chineseTextField;

private Font songTi = new Font("宋体",Font.PLAIN,12);

public RegexStringTest()

{

super("基于字符串的正则表达式");

//创建图形界面

JLabel phoneLabel = new JLabel("电话");

phoneLabel.setFont(songTi);

JLabel zipLabel = new JLabel("邮政编码");

zipLabel.setFont(songTi);

JLabel addressLabel = new JLabel("通信地址");

addressLabel.setFont(songTi);

JLabel firstLabel = new JLabel("First Name:(英文,第一个字母必须大写)");

firstLabel.setFont(songTi);

JLabel lastLabel = new JLabel("Last Name:(英文,第一个字母必须大写)");

lastLabel.setFont(songTi);

JLabel chineseLabel = new JLabel("中文");

chineseLabel.setFont(songTi);

JButton okButton =  new JButton("验证");

okButton.setFont(songTi);

okButton.addActionListener(new ActionListener()

{

//内部类开始

public void actionPerformed(ActionEvent e) {

validateDate();

}//内部类结束

});//调用addActionListener结束

phoneTextField = new JTextField(15);

zipTextField = new JTextField(6);

addressTextField = new JTextField(35);

firstTextField = new JTextField(20);

lastTextField = new JTextField(20);

chineseTextField = new JTextField(30);

JPanel firstName = new JPanel();

firstName.add(firstLabel);

firstName.add(firstTextField);

JPanel lastName = new JPanel();

lastName.add(lastLabel);

lastName.add(lastTextField);

JPanel address = new JPanel();

address.add(addressLabel);

address.add(addressTextField);

JPanel zipAndPhone = new JPanel();

zipAndPhone.add(zipLabel);

zipAndPhone.add(zipTextField);

zipAndPhone.add(phoneLabel);

zipAndPhone.add(phoneTextField);

JPanel chinese = new JPanel();

chinese.add(chineseLabel);

chinese.add(chineseTextField);

JPanel ok = new JPanel();

ok.add(okButton);

//把GUI部件添加在容器中

Container container = getContentPane();

container.setLayout(new GridLayout(6,1));

container.add(firstName);

container.add(lastName);

container.add(address);

container.add(zipAndPhone);

container.add(chinese);

container.add(ok);

pack();

setVisible(true);

}//RegexStringTest构造器结束

public static void main(String args[])

{

RegexStringTest application = new RegexStringTest();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

/**

* 处理鼠标点击事件

*/

private void validateDate()

{

//确保每个文本框不为空

if(lastTextField.getText().equals("") ||

firstTextField.getText().equals("")||

addressTextField.getText().equals("")||

zipTextField.getText().equals("")||

phoneTextField.getText().equals("")||

chineseTextField.getText().equals(""))

{

JOptionPane.showMessageDialog(this, "每个栏目都必须填写");

}

else if(!firstTextField.getText().matches("[A-Z][a-zA-Z]*"))

{//验证First Name是不是以大写字母的一个英文单词

/*

* [A-Z]匹配单个大写字母,其后面的[a-zA-Z]*表示可以匹配任意数目的

* 字母。通常,在正则表达式中出现运算符(量词)"*"的时候,程序将匹配

* "*"前的0个或多个子表达式。同理,"A*"和"A+"都与"A"匹配,但"A*"

* 还可以匹配一个空的字符串。

*/

JOptionPane.showMessageDialog(this, "First Name非法");

}

else if(!lastTextField.getText().matches("[A-Z][a-zA-Z]*"))

{//验证Last Name是不是以大写字母开头的一个英文单词

JOptionPane.showMessageDialog(this, "Last Name非法");

}

else if(!addressTextField.getText().matches("\\d+\\s+([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)"))

{//验证地址是否为数字开始,并包含一个单词或者两个单词

/*

* 这里的地址格式是西方的格式,也就是门牌号在前,街名在后。

* \\d+\\s+([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)

* 首先是匹配任意的数字(\\d+),"\d"是表示数字字符,这里之所以要加上一个"\"

* 是因为"\"在Java中是作用转义字符的。所以这里的"\\d"就正好表示正则表达

* 式中的"\d"。然后,继续验证数字后面是否至少有一个空白字符(\\s+)。字符

* "|"将表达式与其左边或者右边的字符串相匹配。如:Hello(Tom|Rich)就和

* Hello Tom以及Hello Rich相匹配。括号用于将正则表达式的各个部分连接

* 起来。这里字符"|"左边([a-zA-Z]+)匹配一个单词,而右边

* ([a-zA-Z]+\\s[a-zA-Z]+)匹配两个单词,注意两个单词之间只能有一个空白

* 字符(\\s)。因此,这里如果用户输入"123 Main"或者"123 Main Street"

* 都是有效的。

*/

JOptionPane.showMessageDialog(this, "地址非法");

}

else if(!zipTextField.getText().matches("\\d{5}"))

{//验证邮政编码是否为一个5位数的数字

/*

* "\\d{5}"表明邮政编码匹配5个数字。另外可以用其他写法实现相同的功能

* 如:"[0-9]{5}"

*/

JOptionPane.showMessageDialog(this, "邮政编码非法");

}

else if(!phoneTextField.getText().matches("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}"))

{//验证电话号码格式是否为123-456-7890并且区号和电话号码的第一位不能是数字0

/*

* [1-9]\\d{2}-[1-9]\\d{2}-\\d{4}

* 本例采用的美国的电话号码形式,如123-456-7890,即头三位数字为区号

* ,之后紧跟一个短横线,接着是电话号码的头三位,之后又是一个短横线,

* 最后是电话号码的最后四位数。注意这里"[1-9]\\d{2}"表示匹配一个3位

* 数的数字,但其第一个数字不能为0.如果希望123-4567890这种格式的电话

* 号码也合法,可以修改"[1-9]\\d{2}-[1-9]\\d{2}-?\\d{4}"

* 我们在第2个短横线后加一个"?"号,表示"-"可以出现,也可以不出现。

*/

JOptionPane.showMessageDialog(this, "非法的电话号码");

}

else if(!chineseTextField.getText().matches("[\u4E00-\u9FA5]+"))

{

/*

* [\u4E00-\u9FA5]+,验证了用户输入的数据是否全部为中文字符。

*/

JOptionPane.showMessageDialog(this, "只能输入中文");

}

else

{

JOptionPane.showMessageDialog(this, "谢谢,您输入的完全合法");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值