巧用正则表达式实现JavaScript的用户输入校验
2013-04-29林海菁
林海菁
【摘要】在Web程序中,常常需要使用JavaScript脚本进行用户输入校验,避免非法数据传递到服务端。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符及其组合,组成一个“规则字符串”,用来表达对字符串的一种过滤逻辑。采用正则表达式可以轻松地解决Web程序客户端用户输入校验的问题。
【关键词】正则表达式;JavaScript脚本;用户输入校验
一、引言
在Web程序中,为了实现网页上的动态功能,需要使用脚本语言进行编程处理。通过脚本,可以动态控制网页的外观和内容,可以控制浏览器的行为,可以实现用户交互操作,可以读写部分客户端信息,等等。其中验证用户输入表单的信息这一功能在大大小小的Web程序中普遍存在,是所有Web程序开发者都要解决的问题。本文介绍了如何利用正则表达式完美实现客户端的用户输入校验。由于客户端脚本语言种类比较多,本文就以比较流行的JavaScript为例进行说明。
二、创建正则表达式
正则表达式,又称正规表示法、常规表示法,是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式具有极强的灵活性、逻辑性和功能性,可以迅速地用极简单的方式达到字符串的复杂控制,但是对于刚接触的人来说,它又显得非常晦涩难懂。
在JavaScript中,正则表达式由RegExp对象表示。可以使用RegExp( )构造函数创建RegExp对象,其语法格式如下所示:
var 对象变量名=new RegExp(“正则表达式模式字符串”)
JavaScript还提供正则表达式直接量这种语法从而更方便地创建JavaScript正则表达式,它用包含在一对斜杠(/)之间的字符来表示正则表达式,这是比较常见的创建正则表达式的方法,其语法格式如下所示:
var 对象变量名=/正则表达式模式字符串/
无论采取哪种形式,创建一个RegExp对象都是比较容易的。比较晦涩难懂的地方在于正则表达式的语法,即如何描述字符的模式。
三、正则表达式语法
一个正则表达式是由普通字符(如数字、字母)以及特殊字符(称为元字符)组成的字符模式。正则表达式作为一个模板,将某个字符模式与给定的字符串进行匹配。
正则表达式中使用的元字符比较多,限于篇幅,本文只给出一些常用的操作符进行说明,其它未作说明的可以触类旁通。
四、运用正则表达式的方法
在JavaScript脚本中,运用正则表达式检查字符串信息是否匹配有以下两种方法:
1、调用正则表达式对象的常用方法
(1)exec(string)方法:该方法对string进行匹配检查,并返回匹配结果。符合将返回结果“true”,否则返回结果“false”。
(2)test(string)方法:该方法用于测试string是否含有匹配结果,如果包含将返回结果“true”,否则返回结果“false”。
2、调用内置对象String的正则表达式方法
(1)match(pattern)方法:该方法根据正则表达式字符模式pattern对String对象的字符串进行正则匹配,如果匹配到,返回匹配结果,如果匹配不到则返回null。
(2)search(pattern)方法:该方法根据pattern对字符串进行正则匹配,如果匹配到一个结果,则返回它的索引数,否则返回-1。
(3)replace(pattern, replacement)方法:该方法根据pattern对字符串进行正则匹配,将匹配结果替换为replacement。
(4)split(pattern)方法:该方法根据pattern对字符串进行正则分割,返回一个分割的数组。
五、常用正则表达式
很多通用的用户输入信息在多数Web程序中都会出现,如身份证号、邮箱地址、电话号码等,开发者可以将这些信息的检查定义成常用的函数,写在一个js文档中,供各Web程序随时调用。以下列举出一些较复杂的但常用的正则表达式供参考:
1、检查身份证号
function checkIdCard (s) {
//身份证正则表达式(15位)
var rs1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
//身份证正则表达式(18位)
Var rs2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
return rs1.test(s) || rs2.test(s);
}
2、检查字符串中是否含有中文
function hasChinese (s) {
var rs=/[\u4E00-\u9FA5]/g;
return rs.test(s);
}
【参考文献】
[1]Nicholas C.Zakas.JavaScript高级程序设计[M].人民邮电出版社,2012.
[2]David Flanagan.JavaScript权威指南[M].清华大学出版社,2007.