正则表达式浅谈

电子邮件验证

正则表达式(regular expression, 常常缩写为RegExp) 是一种用特殊符号编写的模式,描述一个或多个文本字符串。使用正则表达式匹配文本的模式,这样脚本就可以轻松的识别和操作文本。其实,正则表达式是值得大家花时间学习的。正则表达式不仅在javaScript 中有用,在其他许多地方也可以使用正则表达式,例如其他编程语言(比如Perl,Java,C#,PythonPHP,Apache 配置文件以及BBEditTextMate 等文本编辑器。甚至Adobe DreamweaverMicrosoft Word( 在一定程度上) 使用正则表达式也可以实现更强大的搜索和替换。

下面是一个验证电子邮件的正则表达式

var re = /^/w+([/.-]?/w+)*@/w+([/.-]?/w+)*(/./w{2,3})+$/ ;

下面我们开始剖析这个正则表达式

re 是一个变量, 用来存储右边的正则表达式,在javascript 中,声明变量使用Var 关键字。

正则表达式的阅读顺序是从左向右的

正则表达式总是以(/) 开头和结尾,斜杠之间的所有内容都是正则表达式的组成部分。

脱字符(^) 表示我们要使用这个表达式来检查以特定字符串开头的字符串。如果去掉脱字符,那么即使字符串开头有一堆垃圾字符,电子邮件地址也可能被认为是有效的。

表达式/w 表示任意单一字符,包括a~zA~Z0~9 或下划线。电子邮件必须这些字符之一开头。

加号+ 表示我们要寻找前面条目的一次或多次出现。

园括号() 表示一个组,这意味着后面要引用圆括号中的所有内容,所以现在将它们放在一个组中。

放括号[] 用来表示可以出现其中的任意一个字符。在这个示例中,方括号内包含字符/.- 。我们希望允许用户输入点号或连字符,但是点号对于正则表达式有特殊的意义,所以需要在它前面加上反斜杠/, 在特殊字符前加反斜杠表示“对字符转义”,经转义后的字符表示其本身意义。因为有方括号,输入字符串在这个位置可以有一个点号或一个连字符,但是两种不能同时存在。

问号?表示前面的条目可以出现一次或不出现。所以电子邮件地址的第一部分中可以有一个点号或一个连字符,也可以没有。

在?后面,再次使用/w+ ,表示点号或连字符后面必须有其他字符。

在()后面出现的* 号,表示前面的条目可以出现零次或多次。所以圆括号中的内容可以出现零次或多次。

@ 字符代表其本身,没有任何其他意义,这个字符位于电子邮件地址和域名之间。

@ 字符后再次出现/w+ ,表示@ 后必须出现字符。在此之后,再次出现([/.-]?/w+)*, 表示电子邮件地址的后缀中允许出现点号或连字符。

然后,在一对圆括号中建立另一个组(/./w{2,3}), 表示我们希望找到一个点号,后面跟一些字符。在这个示例中,花括号中的数字表示前面的条目可以出现23 次。在这个组的后面是一个+ 号,表示前面的条目(这个组)必须出现一次或多次。这会匹配.com.edu 之类的,也与ox.ac.uk 匹配。

最后,正则表达式的末尾是一个美元符号$ ,表示匹配的字符串必须在这里结束。斜杠结束正则表达式。

 

验证文件名

var re=/^(file|http):/S+///S+/.(gif|jpg|jpeg|png)$/i ;

我们希望检测输入的整个字段,所以正则表达式以/^ 开头,以$/ 结束。输入可以以文本httpfile 开头,所以将这两字符串放在一个组中,用| 分隔,表示两者可以接受其中之一。无论用户是从本地硬盘还是从Web 获得图像,:// 几个字符都是必须的,所以接下来检查这些字符。

在此之后,可以出现任何字符,所以使用/S+ 表示后面是一个或多个非空格字符。然后需要另一个前向斜杠来分隔域名和文件名,然后是另一个/S+ ,用来处理文件名。

文件名需要以点号和gifjpgjpegpng 结束。点号经过转义,两个后缀组合在一起,表示接受其中之一。

在这个正则表达式后面,使用修饰符i 允许用户输入大写或小写字母。这个修饰符让正则表达式不区分

小写。


提取字符串,并对字符串进行格式化

    用户常常很随意的输入数据。如果你希望输入符号一种标准格式,那么最好自己处理格式化。以下是一个javascript 脚本的一个函数,它的主要作用是获得用户输入的姓名列表,然后将这些姓名格式化输出。

function regExp(inNameList) {

    var newNames = new Array;

    var newNameField = "" ;

    // 提取字符串的正则表达式

    var re = //s*/n/s*/;

    var nameList = inNameList.split(re);

    // 格式化

    re = /^(/S)(/S+)/s(/S)(/S+)$/;

    for (var k=0; k<nameList.length; k++) {

        if (nameList[k]) {

            // 搜索匹配

            re.exec(nameList[k]);

            // 将格式化后的字符串放入newNames 数组中

            newNames[k] = RegExp.$1.toUpperCase() + RegExp.$2.toLowerCase() + " " + RegExp.$3.toUpperCase() + RegExp.$4.toLowerCase();

        }

    }

    // 格式化输出

    for (k=0; k<newNames.length; k++) {

        newNameField += newNames[k] + "/n" ;

    }

    return newNameField;

}

1.     var re = //s*/n/s*/; 它的搜索文本模式是由任何空白字符(/s*), 然后是换行符(/n), 再后同样是任何空白字符(/s*) 组成,

2.     var nameList = inNameList.split(re); 字符串方法split() 获得正则表达式,并且将它应用于inNameList 中的数据。每个换行符分隔一个姓名,split() 将每行上的输入数据分隔开。结果是一个姓名的字符串数组,其中每个数组元素都是一个姓名。

3.     re = /^(/S)(/S+)/s(/S)(/S+)$/; 将姓和名分开为4 个部分:名字的首字母^(/S) 、名字的剩余字符(/S+) 、姓的首字母(/S) 、姓的其他字符(/S+)

4.     re.exec(nameList[k]); 使用exec() 方法在字符串nameList[k] 上执行正则表达式re, 从而将字符串分为4 个部分,并且自动地设置JavaScript 内置的RegExp 对象。这4 个部分分别存储在RegExp.$1RegExp.$2RegExp.$3RegExp.$4 中。

5.     newNames[k] = RegExp.$1.toUpperCase() + RegExp.$2.toLowerCase() + " " + RegExp.$3.toUpperCase() + RegExp.$4.toLowerCase(); 将转换后的姓名存储在newNames 中。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daniel的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值