如何使用JavaScript和正则表达式进行数据验证

 更新时间:2013年05月10日 15:34:11   作者:  
利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作,下面与大家分享下如何使用JavaScript和正则表达式进行数据验证,感兴趣的朋友可以参考下哈
数据验证是网络应用软件从客户端接受数据的重要步骤,毕竟,您需要在使用客户数据前确保其符合预期的格式。在网络应用程序中,您可以选择使用特定平台的工具,比如ASP.NET、JSP等等,或者您可以利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作。

正则表达式
正则表达式是一种模式匹配的工具,它允许您以文字方式来表述模式,因而正则表达式成为了一个验证文本数据的强大工具。除了模式匹配之外,正则表达式还可以用于文字替换。从我在UNIX系统上使用Perl时第一次接触到正则表达式开始,对正则表达式的支持就一直在不断延伸。
注意:如果您身边有很多其他的开发者,正则表达式可能会被称作RegEx或者RegExp。尽管正则表达式的功能强大,不过其语法有点“神秘”,需要花一些时间来掌握,下面就让我们来看看使用正则表达式的一些基础知识。

基本语法
正则表达式的语法可以应用得很复杂,甚至需要一整本书来讲解这个题目,但是我将讲解其中一部分基本知识来帮助您获取正则表达式的初步认识。
一个基本概念是锚(anchor),它允许您指定字符串的起点和终点,脱字符(^)用于指定字符串的起点而美元符号($)则表示终点。如果需要在查询字符串中含有脱字符或者美元符号,您可以使用转义序列来实现,转义字符()是优先于脱字符或者美元符号之处理的。以下的例子会在单词search在字符串中出现时进行匹配。

^search$
而且,您还可以查找一组字符,只要将它们放在方括号中就行了,比如[ and ],相匹配的字符必需属于这个字符组,一个例子是在[12345]的范围内寻找匹配的数字1到5,该正则表达式也可以写作[1-5]。
很多时候您可能需要指定可以出现多次的字符,或者可选的字符,问号(?)的意思是该字符是可选的,加号(+)的意思是该字符可以出现一次或者多次,星号(*)的意思是该字符可以不出现或者出现多次。
现在让我们来看看如何将这些简单的正则表达式应用到JavaScript上。

JavaScript支持
JavaScript在1.2版本中添加了对正则表达式的支持,浏览器的支持则开始于Internet Explorer 4和Netscape 4,所有的Firefox 版本以及大多数现代浏览器都包含了JavaScript的支持。正则表达式可以通过JavaScript的字符串和RegExp来使用。

使用字符串
每个JavaScript字符串都可以通过三种方法来支持正则表达式,这三种方法是match()、replace()和search(),而且对象的test() 方法还允许您进行测试。以下是关于match()、replace()和search()方法的信息:
match(): 用于正则表达式匹配,如果多个匹配出现,则返回一个含有所有匹配结果的数组,数组中的每一个条目都是一份包含了匹配数据的拷贝;如果没有匹配值,则返回空值。

replace(): 用于正则表达式匹配并将所有的匹配值替换为新的子字符串,本方法的第一个参数是正则表达式,第二个参数是进行替换的字符串。

search(): 用于在正则表达式与指定字符串之间搜索匹配值,如果出现匹配值,则返回字符串的索引值,如果没有匹配值,则返回-1。

JavaScript 还提供了RegExp对象来创建并使用正则表达式。

RegExp
RegExp对象包含了正则表达式的模式,该对象的方法和属性可以用来匹配字符串,有两种方法可以用来创建RegExp对象的实例:使用构造函数或使用正则表达式文本模式的文字方式,第二个参数是可选的,该参数可以指定该搜索是全局的(g)、忽略大小写的(i)或者全局同时忽略大小写(gi)。以下的例子是使用构造函数创建RegExp对象的方法,在这个例子中,搜索对象的大小写是被忽略的:
复制代码 代码如下:

testRegExp = new RegExp("^search$","I")

您可以使用文字方式来创建相同的实例(在斜杠中的部分),如下所示:
复制代码 代码如下:

testRegExp = /^search$/i

RegExp对象包含了大量的方法,但我们只介绍其中的一个方法test。该方法将对指定字符串进行正则表达式匹配,如果成功则返回true,失败则返回false,该方法可以应用在文字字符串或者字符串变量上,基本上,它允许您对一个字符串进行正则表达式匹配,以下的例子演示了如何使用这个方法:
复制代码 代码如下:

testRegExp = /search/i;
if (testRegExp.test("this is a search string") {
document.write("The string was found.");
} else {
document.write("No match found.");
}
We can place it in a Web page to test:
<html><head>
<title>RegExp test</title>
</head><body>
<script language="javascript">
testRegExp = /search/i;
if (testRegExp.test("this is a search string")) {
alert("The string was found.");
} else {
alert("No match found.");
}
</script></body></html>

实际操作
现在是讲解更加完整的例子的时候了,在列表A中的网页包含了JavaScript方法来验证文本框中输入的值,这段JavaScript代码将搜索包含我的姓氏和我的两个名字的字符串(忽略大小写),如果找到了我的名字,则通过字符串对象的替换方法(search)将其替换为一个短名字。第二个文本框是用于接受时间值的,一个正则表达式在此对输入的时间进行合法性验证(数字是通过冒号分割的)。这个简单的例子说明了如何在您的客户端代码中加入正则表达式来进行匹配和替换:
复制代码 代码如下:

<html><head>
<title>RegExp validation</title>
<script language="JavaScript">
function validate() {
var doc = document.test;
varvalName = new RegExp("^(Tony|Anthony) Patton", "i");
if (doc.Name.value.match(valName) == null) {
alert("Name was not found.");
} else {
doc.Name.value = doc.Name.value.replace(valName, "T. Patton");
}
varvalTime = new RegExp("^([0-1][0-9]|[2][0-3]):([0-5][0-9])$");
if (doc.time.value.match(valTime) == null) {
alert("Please enter correct time format (hh:ss)");
} }
</script></head>
<body><form name="test">
Name: <input type="text" name="Name" value=""><br>
Time: <input type="text" name="time" value=""><br>
<input type="button" name="test" value="test" onClick="validate();">
</form></body></html>

强大而复杂
正则表达式的功能确实很强大,但是使用起来也并不简单,因此,应当循序渐进地学习,当然,它确实值得您花上一些时间来学习如何正确使用。正则表达式为JavaScript (以及其他的语言)操作文本,通用软件进行表单验证提供了一个简单而优雅的方法。

相关文章

  • 手机号码验证方法(正则验证)

    手机号码验证方法(正则验证)

    这篇文章主要介绍了手机号码验证方法(正则验证),在文章中还给大家补充了最新手机号的验证正则表达式,需要的朋友可以参考下
    2017-02-02
  • 正则表达式模式修饰符

    正则表达式模式修饰符

    下面列出了当前可用的正则表达式修饰符。括号中提到的名字是正则表达式内部这些修饰符的名称。 模式修饰符中的空格,换行符会被忽略,其他字符会导致错误
    2016-12-12
  • 浅析lastIndex对正则表达式结果的影响

    浅析lastIndex对正则表达式结果的影响

    js中正则表达式的使用方式有两种,一种是正则表达式对象的方法,一种是字符串对象的方法。下面通过本文给大家分享lastIndex对正则表达式结果的影响,需要的朋友参考下吧
    2017-11-11
  • swift中的正则表达式小结

    swift中的正则表达式小结

    正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
    2015-10-10
  • js正则表达式常用函数详解(续)

    js正则表达式常用函数详解(续)

    之前一篇已经带领大家认识了一下正则表达式常用函数最基本的功能及使用方法。本文再带领大家一起应用正则表达式,深入学习正则表达式中常用的方法及对象,例如:test、exec、match、replace、search等等,需要的朋友可以参考下
    2015-12-12
  • 正则表达式速查表

    正则表达式速查表

    正则表达式在工作中经常用,但是有些东西就是记不住,我从来不强求自己去记记不住的东西。我的选择是整理出来,用的时候查。如下是我常用的正则表达式速查表
    2015-06-06
  • 正则表达式,提取网页中的链接地址

    正则表达式,提取网页中的链接地址

    正则表达式,提取网页中的链接地址...
    2006-10-10
  • 一个非常不错的一个正则练习JS版

    一个非常不错的一个正则练习JS版

    一个非常不错的一个正则练习JS版...
    2007-06-06
  • Idea使用正则表达式批量替换字符串的方法

    Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-07-07
  • 正则表达式语法规则及在Javascript和C#中的使用方法

    正则表达式语法规则及在Javascript和C#中的使用方法

    正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作
    2013-10-10

最新评论