巧用正则表达式实现JavaScript的用户输入校验

2013-04-29 12:53林海菁
西江月·中旬 2013年7期
关键词:字符串正则字符

林海菁

【摘要】在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.

猜你喜欢
字符串正则字符
寻找更强的字符映射管理器
字符代表几
一种USB接口字符液晶控制器设计
剩余有限Minimax可解群的4阶正则自同构
消失的殖民村庄和神秘字符
类似于VNL环的环
有限秩的可解群的正则自同构
一种新的基于对称性的字符串相似性处理算法
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案