浏览 1795 次
锁定老帖子 主题:二类正则表达式的优化写法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-31
最后修改:2011-06-01
只讨论验证方面的。 只要找到不符合的,那么就提示错误。这种验证思路的写法,可以避免^+*?$等量词的使用。用例子来做说明吧,方便对比。比如验证只能输入数字:
//正常思维的写法 var exp = new RegExp(); exp = /^\d+$/; if( !exp.test("2a2") ){ alert("只能输入数字"); return false; } //逆向思维的写法 exp = /\D/; if( exp.test("2a2") ){ //注意无感叹号 alert("只能输入数字"); return false; } 这个例子可以很清晰的说明区别了,从写法上看:逆向写法很简洁,没有+*?等数量量词,没有$结尾量词,一般也没有^开头量词(多条件的除外),并且if验证中,不再用"非"判断。下面再举几个例子,就更好看出逆向写法的简洁性了。为了简洁,不再写出if判断:
//只能输入数字: exp = /^[0-9]+$/; //入门级的菜鸟写法 exp = /^\d+$/; //使用量词的写法 exp = /\D/; //改进 //只能字母 exp = /^[a-zA-Z]+$/; //一般写法 exp = /[^a-zA-Z]/; //改进 //只能输入单词字符(字母数字或_) exp = /^[a-zA-Z0-9\_]+$/ //入门级的菜鸟写法 exp = /^\w+$/; //使用量词的写法 exp = /\W/; //改进 //只能输入单词字符(字母数字或_),并且不以数字开头 exp = /^[a-zA-Z]\w*$/; //一般写法 exp = /\W|^\d/; //改进 看出逆向写法的简洁性了吧?对此我进行了一些总结,不过发现,逆向写法的适用范围郁闷不大哎!像邮箱地址等某位必须固定的有顺序问题的多条件的正则表达式,用逆向写法反而可能会变得非常复杂了!如果不考虑顺序问题:^(pq)=(^p)|(^q)(三个或三个以上的省略)还可以接受,而如果考虑顺序问题(比如邮箱地址@有顺序问题),那几乎都不可写了!像上面的最后一个例子,如果所有条件都可以转为简单的量词,那么可以进行优化,如果不是,那就不要使用逆向写法了。当然,用逆向写法写多条件的表达式,阅读上也会引起理解上的问题。故:单条件的正则,或可转为简单量词的多条件正则,均可优化为逆向写法!
编辑了下,添加了附件,经理说总结的东西都写成ppt方便培训和交流。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-31
郁闷,字体的效果怎么只在第一段起作用?
|
|
返回顶楼 | |