正则表达式
正则表达式是用来指定字符串模式的,可以方便的处理文本信息。当需要使一个字符串符合特定的字符串格式的时候,就需要使用正则表达式。例如:用户名、密码的格式,区号、电话号码所固有的格式等,都可以用正则表达式来检验是否符合格式要求。正则表达式中经常用到的语法表达式及用法见表15-10所示。
表15-10 NumberFormat类的主要方法及功能
字 符
用 法
[ ]
匹配的字符范围或列表
?
匹配单个字符
*
匹配任何位置
\t,\n,\r,\f,\a,\e
控制字符:制表符、换行符、回车符、换页符、警告符和转义符
^
“否”符号,如果用在方括号内,表示不想要匹配的字符
\d
一个数字字符[0~9]
\D
一个非数字字符[ ^0~9]
\s
一个空白字符[\t\n\r\f\x0B]
\S
一个非空白字符[^\t\n\r\f\x0B]
\w
一个单词字符,效果与[a-zA-Z0-9_]相同
\W
一个非单词字符,效果与[^a-zA-Z0-9_]相同
^$
输入的开始和结束位置
\b
字边界
\B
非字边界
续表
字 符
用 法
\A
输入的开始
\z
输入的结束
X?
字符X是可选的
X*
包含字符X有0个或多个
X+
包含字符X有1个或多个
X(n),X(n,),X(n,m)
分别为:n个字符X,至少n个字符X,n和m之间个字符X
XY
X中的任何字符串后面接着Y中任何字符串
X|Y
X或Y中任何字符串
代码15-10说明了正则表达式的使用。创建了一个用户名及密码输入窗口,使用正则表达式来检验,用户名字符串的输入必须是以字母开头,可以包含字母和数字;密码必须由字母和数字组成,必须含有至少一个字母和数字。同时用户名长度不得超过15个,密码长度不得少于4位,两次密码的输入必须完全一致。若输入错误,则会给出相应的错误显示。
代码15-10 正则表达式的使用
import .*;
import .*;
import .*;
public class ValidateFrame extends JFrame implements
ActionListener
{
private JTextField nameTextField;
private JPasswordField passwordTextField;
private JPasswordField confirmPswTextField;
JButton okButton;
JButton exitButton;
public
ValidateFrame() //构造方法
{
super("Validate");
//声明JLabel标签对象
JLabel name = new JLabel("Name");
JLabel password1 = new JLabel("Password");
JLabel password2 = new JLabel("Comfirm
Password");
//创建JButton对象okButton,并指定按钮上字符为"OK"
okButton = new JButton("OK");
exitButton = new JButton("EXIT");
//创建JButton对象exitButton,并指定按钮上字符为"OK"
(this);
//添加okButton事件监听器
(this);
//添加exitButton事件监听器
//以下用来创建窗口中字符串及密码输入栏
nameTextField = new JTextField(15);
passwordTextField = new JPasswordField(10);
confirmPswTextField = new JPasswordField(10);
//创建JPanel对象NamePanel面板,并在其中加入name标签及用户名输入栏
JPanel NamePanel = new JPanel();
(name);
(nameTextField);
//创建JPanel对象passwordPanel1面板,并在其中加入password1标签及密码输入栏
JPanel passwordPanel1 = new JPanel();
(password1);
(passwordTextField);
//创建JPanel对象passwordPanel1面板,并在其中加入password2标签及密码确认输入栏
JPanel passwordPanel2 = new JPanel();
(password2);
(confirmPswTextField);
//创建JPanel对象buttonPanel面板,并在该面板中加入2个按钮
JPanel buttonPanel = new JPanel();
(okButton);
(exitButton);
//创建并设置窗口布局方式为GridLayout
Container container = ();
(new GridLayout(4,1));
//以下四句将组件添加至窗口中
(NamePanel);
(passwordPanel1);
(passwordPanel2);
(buttonPanel);
setSize(325,225); //设置窗口大小
setVisible(true); //设置窗口为可见
}
public void actionPerformed(ActionEvent
e) //按钮事件处理方法
{ //处理按键的事件
if(() ==
okButton) //单击okButton时,程序所作的处理
{
validateDate(); //调用validateDate()方法
}
if(() ==
exitButton) //单击exitButton时,程序所作的处理
{
(false); //设置窗口为不可见
(0); //退出程序
}
}
private void validateDate()
{ //检验窗口输入栏中,用户输入的数据是否符合要求
if(().equals("")||
().equals("")||
().equals("")) // end of
condition
(this,"Please fill all fields");
//以上用来判断是否有输入栏为空
else
if(!().matches("[a-zA-Z][a-zA-Z0-9]*"))
(this,"Invalid name,the name must
begin with letter");
//以上用来判断,用户所输入的用户名是否以字母开头,是否由字母及数字组成
else if(().length()>15)
(this,"The name's length limit 15
letters");
//以上用来判断,用户输入的用户名,是否超过限定长度的15个字符
else
if(().length<4)
(this,"The password's length is too
short");
//以上用来判断,用户输入的密码长度是否少于4个字符
else if(!validatePassword())
(this,"The password must contain
letters and numbers");
//调用validatePassword()方法,用来判断用户输入的密码的格式是否符合要求,必须同时包含字
母和数字
else if(!compareTwoPassword())
(this,"The password input are not
same");
//调用compareTwoPassword()方法,用来判断用户两次输入的密码是否一致
else
(this,"All Data is OK!");
}
private boolean
validatePassword() //密码输入校验方法
{
boolean b = false;
String password = new String(());
//将字符数组()的内容,创建为字符串password
b = ("[a-zA-Z]+[0-9]+");
//使用正则表达式"[a-zA-Z]+[0-9]+"来判断密码password必须同时包含字母和数字
return b;
}
private boolean
compareTwoPassword() //两次输入密码核对方法
{
boolean b = false;
String password1 = new String(());
//将字符数组()的内容,创建为字符串password1
String password2 = new
String(());
//将字符数组()的内容,创建为字符串password2
if((password2))
b=true; //比较字符串
return
b; //返回布尔型变量的值
}
public static void main(String[] args)
{
ValidateFrame validateFrame = new ValidateFrame();
(JFrame.EXIT_ON_CLOSE);
}
}