1.介绍
在web前端开发中,难免不会用到对用户的输入进行客户端验证(服务端验证时另一回事了,不多说),只有合法的数据才能提交到服务器端处理,负责服务器很容易遭恶意攻击,要验证用户的输入,线程的js或者jquery插件有Validform等,可是他们都是写了一部分规范的验证,是不可能满足差异化的验证的,那如何自定义符合自己标准的验证条件那,就不得不用到正则表达式,正则表达式的用途往简单了说就是来检验字符串是否符合你的要求的,正则表达式可以用于js中,c#,java等很多语言都支持的,都提供了相应的对象或者类给开发者使用,这里以js中使用为例,其他一眼类似,不过多说明2.构建正则表达式
要使用正则表达式,我们首先需要知道使用正则表达式的步骤,很简单,就2步,构建正则表达式对象,调用构建对象的test(),传递字符串为参数,或者调用字符串对象的search,match,replace,split方法,把构建的正则表达式对象传递给该方法作为参数,即可,和强类型语言没有什么本质取别,js构建正则表达式对象有两种方法1>直接量语法
如下面的格式var reg = /pattern/attributes
参数 pattern 是一个字符串,就是我们制定的验证规则,这个后面会着重介绍
参数 attributes 是一个可选的字符串,一般留空,可供我们使用的字符串有"g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配,ECMAScript 标准化之前,并不支持 m 属性,如果 pattern 是正则表达式,而不是字符串,则必须省略该参数,其实要是用的话,也就i相对常用一些
2>创建 RegExp 对象的语法
var reg = new RegExp(pattern, attributes);//和强类型语言一样,这里可以这样理解,就是new出来一个RegExp对象的实例,对应强烈性语言中的new出类的对象,js中是没有类这个概念的,参数意义和上面的相同就不多说了,下面着重说pattern的构建3.构建正则表达式参数pattern
pattern可以使用的字符大致分为3类1>元字符,是拥有特殊含义的字符,类似强类型语言中的特殊字符类似(如下 \字符),
2>量词,就是用来修饰前一个字符可以出现的次数
0-9 数字
a-z 小写字母
A-Z 大写字母
[] 表示只要有一个字符符合[]内的规则,既符合条件
[^] 表示要搜索不包含[]中任何字符的才符合条件,注意不在[]中的^的区别
| 或者的意思
4.简单实例
var reg = /^a[0-9]{0,9}c$/;reg.test("a54733c");
5.正则表达式是如何运算的
正则表达式是按照从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似,字符优先级如下当我们要改变优先级的时候最常用的是加小括号
6.常用正则表达式
正则表达式 | 作用 |
\n\s*\r | 匹配空白行 |
^s*|s*$ | 匹配首尾空白字符 |
w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* | 匹配Email地址 |
[a-zA-z]+://[^s]* | 匹配网址URL |
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ | 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线) |
d{3}-d{8}|d{4}-d{7} | 匹配国内电话号码,匹配形式如 0511-4405222 或 021-87888822 |
[1-9][0-9]{4,} | 匹配腾讯QQ号,腾讯QQ号从10000开始 |
[1-9]d{5}(?!d) | 匹配中国邮政编码,中国邮政编码为6位数字 |
d{15}|d{18} | 匹配身份证,中国的身份证为15位或18位 |
\d+\.\d+\.\d+\.\d+ | 匹配ip地址 |
^[A-Za-z]+$ | 匹配由26个英文字母组成的字符串 |
^[A-Za-z0-9]+$ | 匹配由数字和26个英文字母组成的字符串 |
^\w+$ | 匹配由数字、26个英文字母或者下划线组成的字符串 |
^-?[1-9]\d*$ | 匹配整数 |
^[1-9]\d*$ | 匹配正整数 |
^-[1-9]\d*$ | 匹配负整数 |
^[1-9]\d*|0$ | 匹配非负整数(正整数 + 0) |
^-[1-9]\d*|0$ | 匹配非正整数(负整数 + 0) |
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ | 匹配浮点数 |
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ | 匹配正浮点数 |
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ | 匹配负浮点数 |
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ | 匹配非负浮点数(正浮点数 + 0) |
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ | 匹配非正浮点数(负浮点数 + 0) |
[^%&'',;=?$x22]+ | 验证是否含有^%&'',;=?$"等字符 |
^[a-zA-Z]w{5,17}$ | 验证用户密码,以字母开头,长度在6-18之间 |
^[u4e00-u9fa5],{0,}$ | 只能输入汉字 |
^((0?[1-9])|((1|2)[0-9])|30|31)$ | 验证一个月的31天,正确格式为:“01”“09”和“1”“31” |
^(0?[1-9]|1[0-2])$ | 验证一年的12个月,正确格式为:“01”-“09”和“1”“12” |
7.参考地址
http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.90).aspxhttp://www.w3school.com.cn/jsref/jsref_obj_regexp.asp