WEB开发网
开发学院网页设计JavaScript 用正则表达式作校验 阅读

用正则表达式作校验

 2007-11-27 17:17:15 来源:WEB开发网   
核心提示:正则表达式的校验功能比通常相象的要强得多,它可以简单地测试输入值是否为空,用正则表达式作校验,也可以校验输入的IP地址是否正确,微软公司对正则表达式的说明极其简单并含糊不清,通过本文,希望有助于初步了解正则表达式的用法,本文将通过示例说明正则表达式的使用,介绍如何更换这些字符串函数

正则表达式的校验功能比通常相象的要强得多。它可以简单地测试输入值是否为空,也可以校验输入的IP地址是否正确。微软公司对正则表达式的说明极其简单并含糊不清。本文将通过示例说明正则表达式的使用,介绍如何更换这些字符串函数。正则表达式是个很有用的工具!

我将通过二个示例来说明正则表达式的应用,可以用VBScript和JavaScript来编写相关代码。第一个示例是大家熟悉的正则表达式校验,第二个示例说明如何校验IP地址。

校验示例
本例说明如何简单地校验输入数据是否为空。

客户端JavaScript校验代码:
01:<html>
02:<head>
03: <title>Validation Example</title>
04: <script langauge=Javascript>
05: // 如果输入值为空,函数返回false
06: function checkEnteredSomething (stringToCheck, fieldName) {
07:  var reSpaceCheck = /^\s*$/;  //创建正则表达式对象
08:
09:  if (reSpaceCheck.test(stringToCheck)) {
10:  alert(You must enter something into the + fieldName + field.);
11:  return false; //输入出错
12:  }
13:  
14:  return true; //输入正确
15: }
16: </script>
17:</head>
18:<body>
19: <form name=testForm id=testForm method=post action=
20:  onsubmit=return(checkEnteredSomething(
  window.document.testForm.username.value, name));>
21: <center>
22: What is you name? <input type=text name=username id=username value= /><br />
23: <input type=submit name=submitButton id=submitButton value=Enter />
24: </center>
25: </form>
26:</body>
27:</html>

可以看到,用JavaScript编写正则表达式校验并不难。在第7行,用斜线(/)创建正则表达式对象。二个斜线之间就是正则表达式类型。^是字符串起始,\s表示空格(space)和跳格(tab),*是通配符,$是字符串结束。

第9行是正则表达式的检测方法,测试输入的字符串是否与正则表达相匹配。如果测试为真,就说明输入值为空。我把校验过程包装在一个函数里,可以将它存为包含文件,凡有需要输入校验的网页都可以用。

那么对客户端不支持JavaScript的浏览器、个人电子助理(PDA)、移动电话怎么办呢?可以用服务端asp网页的VBScript来编写代码。

服务端VBScript校验代码:
01:<%@ LANGUAGE = VBScript
02: EnableSessionState = False%>
03:<!-- test.asp File -->
04:<%
05:Dim username
06:Dim reSpaceCheck
07:Dim formPost
08:Dim failedTest
09:
00:if Request.Form.Item(submitButton) = Enter then
11: formPost = true
12:else
13: formPost = false
14:end if
15:
16:if formPost then
17: username = Request.Form.Item(username)
18: Set reSpaceCheck = new RegExp
19: reSpaceCheck.pattern = ^\s*$
20:
21: failedTest = reSpaceCheck.test(username)
22:end if
23:%>
24:<html>
25:<head>
26: <title>Validation Example</title>
27:</head>
28:<body>
29: <center>
30: <%if formPost then
31: if failedTest then%>
32:  <b><font color=red>You must enter something into
  the name field.</font></b>
33: <%else%>
34:  <b>Hello <%=username%>!</b>
35: <%end if%>
36: <br />
37: <%end if%>
38: <form name=testForm id=testForm method=post action=test.asp>
39: What is you name? <input type=text name=username
  id=username value= /><br />
40: <input type=submit name=submitButton id=submitButton
  value=Enter />
41: </form>
42: </center>
43:</body>
21:</html>

二者之间没有太大不同。在第18行创建正则表达式对象,19行设置正则表达类型,然后进行比较判别。


匹配示例
现在举例说明更复杂的校验,如IP地址的测试。

客户端JavaScript匹配校验代码:
01:<html>
02:<head>
03: <title>Match Example</title>
04: <script langauge=Javascript>
05: // 如果IP地址非法,返回false
06: function checkIPAddress (ipAddressString) {
07:  var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
08:  var passedTest = false;
09:  
10:  if (reSpaceCheck.test(ipAddressString)) {
11:  ipAddressString.match(reSpaceCheck);
12:  if (RegExp.$1 <= 255 && RegExp.$1 >= 0
13:   && RegExp.$2 <= 255 && RegExp.$2 >= 0
14:   && RegExp.$3 <= 255 && RegExp.$3 >= 0
15:   && RegExp.$4 <= 255 && RegExp.$4 >= 0) {
16:   passedTest = true;
17:  }
18:  }
19:  
20:  if (!passedTest) {
21:  alert(You must enter a valid IP Address.);
22:  return false;
23:  }
24:  
25:  return true;
26: }
27: </script>
28:</head>
29:<body>
30: <form name=testForm id=testForm method=post action=
31: onsubmit=return(checkIPAddress(
  window.document.testForm.ipAddress.value));>
32: <center>
33: Enter an IP Address: <input type=text name=ipAddress
  id=ipAddress value= /><br />
34: <input type=submit name=submitButton id=submitButton
  value=Enter />
35: </center>
36: </form>
37:</body>
38:</html>

第7行代码创建正则表达式对象。但这次表达式的类型不同。小括号()里的参数是为后面的子测试用的。\d表示数字匹配,\d+则要求至少匹配一个数字。在测试输入值匹配之后,用子测试确定每个节的数字都在0 - 255之间。子测试时用到全局对象RegExp,它在调用String.match方法时自动生成。

使用VBScript要多写些代码,但也能实现同样的功能。

服务端VBScript匹配校验代码:
01:<%@ LANGUAGE = VBScript
02: EnableSessionState = False%>
03:<!-- test2.asp File -->
04:<%
05:Dim ipAddress
06:Dim reIPAddressCheck
07:Dim formPost
08:Dim passedTest
09:Dim Matches
00:Dim num1
11:Dim num2
12:Dim num3
13:Dim num4
14:
15:if Request.Form.Item(submitButton) = Enter then
16: formPost = true
17:else
18: formPost = false
19:end if
20:
21:if formPost then
22: ipAddress = Request.Form.Item(ipAddress)
23: Set reSpaceCheck = new RegExp
24: reSpaceCheck.pattern = ^(\d+)\.(\d+)\.(\d+)\.(\d+)$
25:
26: if reSpaceCheck.test(ipAddress) then
27: Set Matches = reSpaceCheck.Execute(ipAddress)
28: num1 = Matches.item(0).SubMatches.item(0)
29: num2 = Matches.item(0).SubMatches.item(1)
30: num3 = Matches.item(0).SubMatches.item(2)
31: num4 = Matches.item(0).SubMatches.item(3)
32: if num1 <= 255 and num1 >= 0 _
33:  and num2 <= 255 and num2 >= 0 _
34:  and num3 <= 255 and num3 >= 0 _
35:  and num4 <= 255 and num4 >= 0 then
36:  passedTest = true
37: end if
38: end if
39:end if
40:%>
41:<html>
42:<head>
43: <title>Match Example</title>
44:</head>
45:<body>
46: <center>
47: <%if formPost then
48: if passedTest then%>
49:  <b>You entered <%=ipAddress%> as a valid IP Address.</b>
50: <%else%>
51:  <b><font color=red>You must enter a valid IP Address.</font></b>
52: <%end if%>
53: <br />
54: <%end if%>
55: <form name=testForm id=testForm method=post action=test2.asp>
56: Enter an IP Address: <input type=text name=ipAddress id=ipAddress
  value= /><br />
57: <input type=submit name=submitButton id=submitButton value=Enter />
58: </form>
59: </center>
60:</body>
61:</html>

与JavaScript不同, VBScript没有match命令。所以用正则表达式的Execute方法来处理匹配测试。Execute返回结果中包含四个子数组,对应于每节数字的检测结果。然后检测该节数字是否在0 - 255范围内。检测无误,就得到正确的IP地址。

通过本文,希望有助于初步了解正则表达式的用法。可在微软站点下载有关脚本帮助文件。

Happy Programming!

JS中文帮助 Http://www.chinaok.net/down/jscript5.zip

VBS中文帮助 Http://www.chinaok.net/down/vbscript.zip

Tags:正则 表达式 校验

编辑录入:coldstar [复制链接] [打 印]
赞助商链接