14.7 基本操作实例
通过前面章节的学习,读者应该能总体把握正则表达式的使用方法。下面列举正则表达式的几个比较常用的经典实例,力求 使读者对正则表达式有更好的理解和掌握。
14.7.1
验证日期
假设日期的有效形式类似于“20070801”或者“070801”,验证日期范围为1900年01月01日至2099年12月31日。相应的正则表达式如下所示:
验证日期中“年”部分1900-2099的表达式为((((19){1}|(20){1})\d{2})|\d{2});
验证日期中“月”部分01-12的表达式为0[1-9]|1[0-2];
验证日期中“日”部分01-31的表达式为[0-2]{1}\d{1}|3[0-1]{1}。
综上所述,验证日期的正则表达式为:
((((19){1}|(20){1})\d{2})|\d{2})(0[1-9]|1[0-2] )([0-2]{1}\d{1})|(3[0-1]{1})
程序代码如源程序14.11所示。
//源程序14.11
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html140/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Sample Page!</title>
<script language="JavaScript" type="text/javascript">
<!--
//检测输入的日期字符串格式
function testdate(obj)
{
var str=obj.m_date.value;
var msg="\n验证日期格式 :\n\n";
msg+="原始日期字符串 :\n"+str+"\n";
msg+="验证结果 :\n";
//构造正则表达式进行判断
var regex=/^((((19){1}|(20){1})\d{2})|\d{2})(0[1-9]|1[0-2])([0-2]{1}\d{1})| (3[0-1]{1})$/;
if (!regex.exec(str))
{
msg+="目标日期格式不正确! ";
alert(msg);
obj.m_date.focus();
}
else
{
msg+="目标日期格式正确!";
alert(msg);
return true;
}
}
-->
</script>
</head>
<body>
<center>
<p>
验证日期格式是否正确
</p>
<form onSubmit="return testdate(this);">
<input type="text" name="m_date">
<input type="submit" value="确定">
</form>
</center>
</body>
</html>
程序运行后,在原始页面的文本框内输入正确日期格式的2008北京奥运会开幕日的字符串“20080808”或“080808”,然后单击“确定”按钮,弹出警告框如图14.19所示。
若输入格式不正确的日期字符串“20088080”或“088080”,单击“确定”按钮,弹出警告框如图14.20所示。

图14.19 日期格式正确时弹出警告框 图14.20 日期格式不正确时弹出警告框
14.7.2
验证信用卡号
目前,电子商务在人们生活中占据非常重要的地位,旅游也日益成为一种时尚,在电子商务和旅游过程中,由于现金交易和携带的不便,导致信用卡的使用日益普遍。在互联网交互过程中,经常涉及验证客户端提交的信用卡号码格式是否正确的问题。
目前,在国际上使用最为广泛的信用卡主要有维萨卡(VISA)、万事达卡(MasterCard)和运通卡(American Express)等。要使用JavaScript脚本代码来验证客户提交的信用卡卡号格式是否正确,就必须了解各种信用卡卡号的组成规则。由于各种信用卡用卡号的组成规则有很大差异,很多读者不是很了解,表14.10列出了上述信用卡通用卡号的组成规则。
表14.10 信用卡卡号格式
|
信用卡类型 |
位 数 |
格式实例 |
卡号范围 |
|
维萨卡(VISA) |
16 |
1234 5678 9012 3456 |
4000 0000 0000 0000~ 4999 9999 9999 9999 |
|
万事达卡(MasterCard) |
16 |
1234 5678 9012 3456 |
5100 0000 0000 0000~ 5599 9999 9999 9999 |
|
运通卡(American Express) |
15 |
1234 567890 12345 |
3400 0000000 00000~ 3499 9999999 99999 3700 0000000 00000~ 3799 9999999 99999 |
为了验证上面三种信用卡卡号,构造目标正则表达式如下所示:
/^((4\d{3})|(5[1-5]\d{2}))(-?|\040?)(\d{4}(-?|\040?)){3}|^(3[4,7]\d{2})(-?|\040?)\d{6}(-?|\040?)\d{5}$/
其中\040表示空格,接受的有效形式是“4000 1234 5678 9012”或者“4000-1234-5678 -9012”。程序代码如源程序14.12所示。
//源程序14.12
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html140/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Sample Page!</title>
<script language="JavaScript" type="text/javascript">
<!--
//检验文本框中信用卡卡号格式是否正确
function testCreditCartNum(obj)
{
var str=obj.m_num.value;
var msg="\n验证信用卡卡号格式 :\n\n";
msg+="信用卡卡号 :\n"+str+"\n";
msg+="验证结果 :\n";
var regex=
/^((4\d{3})|(5[1-5]\d{2}))(-?|\040?)(\d{4}(-?|\040?)){3}|^(3[47]\d{2})(-?|\040?)\d{6}(-?|\040?)\d{5}/;
if (!regex.exec(str))
{
msg+="信用卡卡号格式不正确! ";
alert(msg);
obj. m_num.focus();
}
else
{
msg+="信用卡卡号格式正确! ";
alert(msg);
return true;
}
}
-->
</script>
</head>
<body>
<center>
<p>
验证信用卡卡号格式是否正确
</p>
<form onSubmit="return testCreditCartNum(this);">
<input type="text" name="m_num">
<input type="submit" value="确定">
</form>
</center>
</body>
</html>
程序运行后,在原始页面的文本框内输入正确格式的运通卡卡号“3412 123456 12345”,然后单击“确定”按钮,弹出警告框如图14.21所示。
若输入格式错误的信用卡卡号“5812 1234 1234 1234”,然后单击“确定”按钮,弹出警告框如图14.22所示。

图14.21 信用卡卡号格式正确 图14.22 信用卡卡号格式不正确
14.7.3
验证电子邮件地址
在Web页面接收用户提交的电子邮件地址,并提交给服务器进行相关操作前,进行适当的格式验证显得比较重要。在第6.1节已介绍了使用indexOf()方法来验证电子邮件地址格式的方法,该方法效果较为明显,但代码显得很复杂。下面利用正则表达式来验证电子邮件地址格式是否合法。
正确格式的电子邮件地址如zangpu@gmail.com,其必须符合以下条件:
电子邮件地址中同时含有“@”和“.”字符;
字符“@”后必须有字符“.”,且中间至少间隔一个字符;
字符“@”不为第一个字符,“.”不为最后一个字符。
有关电子邮件地址各部分的含义,请读者自行查阅相关资料。根据上述条件,可构造验证电子邮件地址的正则表达式如下所示:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
程序代码如源程序14.13所示。
//源程序14.13
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html140/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Sample Page!</title>
<script language="JavaScript" type="text/javascript">
<!--
//检验文本框中电子邮件地址格式是否合法
function testEmailAddress(obj)
{
var email = obj.m_email.value
var msg="\n验证电子邮件地址合法性 :\n\n";
msg+="电子邮件地址 :\n"+" "+email+"\n";
msg+="返回验证结果 :\n";
//构造正则表达式进行检验
var regex=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if (!regex.exec(email))
{
msg+="电子邮件地址格式不合法! \n";
msg+="电子邮件地址格式 :\n";
//提示用户输入正确的电子邮件地址
msg+="1,电子邮件地址中同时含有'@'和'.'字符;\n";
msg+="2,字符'@'后必须有字符'.',且中间至少间隔一个字符;\n";
msg+="3,字符'@'不为第一个字符,'.'不为最后一个字符。\n";
alert(msg);
obj.m_email.focus();
}
else
{
msg+="电子邮件地址格式合法! \n";
alert(msg);
return true;
}
}
-->
</script>
</head>
<body>
<center>
<p>验证电子邮件地址合法性</p>
<form onSubmit="return testEmailAddress(this);">
<input type="text" name="m_email">
<input type="submit" value="确定">
</form>
</center>
</body>
</html>
程序运行后,在文本框中输入正确格式的电子邮件地址如“zangpu@gmail.com”,然后单击“确定”按钮,弹出警告框如图14.23所示。
当输入格式错误的电子邮件地址如“zangpu.gmail.com”时,由于缺少字符“@”,为不合法的电子邮件地址,单击“确定”按钮,弹出警告框如图14.24所示。

图14.23 输入格式正确的电子邮件地址 图14.24 输入格式不正确的电子邮件地址
由上述实例可以看出,使用正则表达式来验证表单中相关信息的方法呈现出简便、快捷的特点,可大大提高JavaScript脚本的编程效率。在实际应用中其难点在于构造符合要求的正则表达式,同时克服正则表达式本身结构比较晦涩难辨的缺点,下一节将列举实际应用中常见的正则表达式,方便读者查询后直接使用。






