JavaScript系列之检查模式

ZDNet软件频道 时间:2004-05-12 作者:Builder.com |  我要评论()
本文关键词:javatips
现在,我们要来弄点新奇的玩意了。你可以使用JavaScript 来判断某个文本值是否与预定义的模式相符,比如说电子邮件地址、社会保险号码、日期或是账号等等。
本文译自Builder.com,未经许可请勿转载

现在,我们要来弄点新奇的玩意了。你可以使用JavaScript 来判断某个文本值是否与预定义的模式相符,比如说电子邮件地址、社会保险号码、日期或是账号等等。我们将创建一个例子,用来判断某个值看起来是否是有效的电话号码。但是,不管你需要强制哪种模型,都可以使用类似的方法来进行。

下面我们定义我们的新函数isAPhoneNumber():

function isAPhoneNumber(entry) {
  //don't bother validating the pattern if
  //no value was passed in
  if (entry) {
    //parse the value into small subsections
    varopenParen = entry.substring(0,1);
    varareaCode = entry.substring(1,4);
    varcloseParen = entry.substring(4,5);
    var exchange = entry.substring(5,8);
    var dash = entry.substring(8,9);
    var line = entry.substring(9,13);

如果你细分这一大堆的程序代码,你会发现很容易理解。首先,if (entry) 检查是否存在一个输入值。如果存在的话,代码会使用JavaScript substring() 函数将输入值划分或者称解析成独立的块。

方法substring() 功能非常强大,但是它并不怎么直观。这个方法所返回的是一个字符串的部分(用户输入的日期),是以你所传递给它的第一个参数开始,以传递给它的最后一个参数结束的部分。就像C 语言一般,JavaScript 将第一个数字视为第0个元素。因此,举例来说,如果你输入"(123)456-7890",那么entry.substring(0,1) 就只会返回第一个字符,也就是"(";entry.substring(1,4) 则返回"123";entry.substring(4,5) 则返回")";其它依此类推。

一旦我们将数据解析为正确的部分,我们就可以按照我们的模式来检查它们:

//now check each of the subsections
    //individually
    if ((openParen != "(")
      || (!isANumber(areaCode,
"phone number - area code"))
      || (closeParen != ")")
      || (!isANumber(exchange,
"phone number - exchange"))
      || (dash != "-")
      || (!isANumber(line,
"phone number - line"))) {
        alert("Please enter phone number
          in the following format: (123)456-7890");
  }
  }
}

第二步,if 语句检查每一部分,如果只有一个部分不符合我们期望,那么整个电话号码就被视为无效。用中文来说,上面的代码可以翻译为下面的语句:“如果openParen看上去不对(或是areaCode不是数字,或closeParen看起来不对)或是电话号码的交换部分不是数字,亦或是连字号(或电话号码的排列部分)看起来不对,那么就要求用户重新输入电话号码。”

透过将模式解析为不同的部分,我们就能独立地测试每一部分。这样就能够确切地告诉告诉用户到底是哪部分的值有问题。将事情分开来进行能够使代码编写起来更加容易:注意,在检验模式的每个数字部分时,都调用同一个isANumber() 函数。


本文作者:Emily A. Vander Veer 是无数与 Internet 有关的杂志文章和书籍的作者,包括《JavaScript for Dummies》、《JavaScript for Dummies Quick Reference》和《JavaBeans for Dummies》,其所有著作都由 IDG Books 出版。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134