JavaScript中 正则表达式的使用 及 常用正则表达式

Posted 明天也要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中 正则表达式的使用 及 常用正则表达式相关的知识,希望对你有一定的参考价值。

1. 正则表达式的使用

一个正则表达式可认为是对一种字符片段的特征描述,而它的作用就是从一堆字符串中找出满足条件的子字符串。
比如:在javascript中定义一个正则表达式

var reg = /hello/var reg = new RegExp("hello")

那么这个正则表达式可以用来从一堆字符串中找出 hello 这个单词。
而“找出”这个动作,其结果可能是找出第一个 hello 的位置、用别的字符串替换 hello、找出所有 hello 等。
下面就列举一下JavaScript中可以使用正则表达式的函数

String.prototype.search 方法
用来找出原字符串中某个子字符串首次出现的 index,没有则返回 -1

"abchello".search(/hello/);  //  3

String.prototype.replace 方法
用来替换字符串中的子串

"abchello".replace(/hello/,"hi");   //  "abchi"

String.prototype.split 方法
用来分割字符串

"abchelloasdasdhelloasd".split(/hello/);  //["abc", "asdasd", "asd"]

String.prototype.match 方法
用来捕获字符串中的子字符串到一个数组中;
默认情况下只捕获一个结果到数组中,正则表达式有”全局捕获“的属性时(参数g),会捕获所有结果到数组中

"abchelloasdasdhelloasd".match(/hello/);  //["hello"]
"abchelloasdasdhelloasd".match(/hello/g);  //["hello","hello"]

RegExp.prototype.test 方法
用来测试字符串中是否含有子字符串

/hello/.test("abchello");  // true

RegExp.prototype.exec 方法
和字符串的 match 方法类似,这个方法也是从字符串中捕获满足条件的字符串到数组中,但是也有两个区别。

  1. exec 方法一次只能捕获一份子字符串到数组中,无论正则表达式是否有全局属性;
var reg=/hello/g;
reg.exec("abchelloasdasdhelloasd");   // ["hello"]
  1. 正则表达式对象(RegExp)有个 lastIndex 属性,表示下一次从哪个位置开始捕获,每一次执行exec方法后,lastIndex 就会往后推,直到找不到匹配的字符返回 null,然后又从头开始捕获。 这个属性可以用来遍历捕获字符串中的子串。
var reg = /hello/g;
reg.lastIndex; //0
reg.exec("abchelloasdasdhelloasd"); // ["hello"]
reg.lastIndex; //8
reg.exec("abchelloasdasdhelloasd"); // ["hello"]
reg.lastIndex; //19
reg.exec("abchelloasdasdhelloasd"); // null
reg.lastIndex; //0

2. 常用正则表达式

2.1 校验数字的表达式

数字:^[0-9]*$
n位的数字:^\\d{n}$
至少n位的数字:^\\d{n,}$
m-n位的数字:^\\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(\\-)?\\d+(\\.\\d{1,2})?$
正数、负数、和小数:^(\\-|\\+)?\\d+(\\.\\d+)?$
有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
非零的正整数:^[1-9]\\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\\+?[1-9][0-9]*$
非零的负整数:^\\-[1-9][]0-9"*$ 或 ^-[1-9]\\d*$
非负整数:^\\d+$ 或 ^[1-9]\\d*|0$
非正整数:^-[1-9]\\d*|0$ 或 ^((-\\d+)|(0+))$
非负浮点数:^\\d+(\\.\\d+)?$ 或 ^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0$
非正浮点数:^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$ 或 ^(-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*))|0?\\.0+|0$
正浮点数:^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$ 或 ^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$
负浮点数:^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$ 或 ^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数:^(-?\\d+)(\\.\\d+)?$ 或 ^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$

2.2 校验字符的表达式

汉字:^[\\u4e00-\\u9fa5]{0,}$
英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:^[A-Za-z]+$
由26个大写英文字母组成的字符串:^[A-Z]+$
由26个小写英文字母组成的字符串:^[a-z]+$
由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
由数字、26个英文字母或者下划线组成的字符串:^\\w+$ 或 ^\\w{3,20}$
中文、英文、数字包括下划线:^[\\u4E00-\\u9FA5A-Za-z0-9_]+$
中文、英文、数字但不包括下划线等符号:^[\\u4E00-\\u9FA5A-Za-z0-9]+$ 或 ^[\\u4E00-\\u9FA5A-Za-z0-9]{2,20}$
可以输入含有^%&',;=?$\\"等字符:[^%&',;=?$\\x22]+
禁止输入含有~的字符:[^~\\x22]+

2.3 特殊需求表达式

Email地址:^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL:[a-zA-z]+://[^\\s]*^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$
手机号码:^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$ (由于工信部放号段不定时,所以建议使用泛解析 ^([1][3,4,5,6,7,8,9])\\d{9}$)
电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX"和"XXXXXXXX)^(\\(\\d{3,4}-)|\\d{3.4}-)?\\d{7,8}$ 
国内电话号码(0511-4405222021-87888822):\\d{3}-\\d{8}|\\d{4}-\\d{7} 
18位身份证号码(数字、字母x结尾)^((\\d{18})|([0-9x]{18})|([0-9X]{18}))$
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)^[a-zA-Z]\\w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$  
日期格式:^\\d{4}-\\d{1,2}-\\d{1,2}
一年的12个月(0109112)^(0?[1-9]|1[0-2])$
一个月的31天(0109131)^((0?[1-9])|((1|2)[0-9])|30|31)$ 
钱的输入格式:
	1. 有四种钱的表示形式我们可以接受:"10000.00""10,000.00", 和没有 "分""10000""10,000"^[1-9][0-9]*$ 
    2. 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$ 
    3. 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$ 
    4. 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$ 
    5. 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10""10.2" 是通过的:^[0-9]+(.[0-9]{2})?$ 
    6. 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$ 
    7. 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 
    8. 13个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 
备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m以上是关于JavaScript中 正则表达式的使用 及 常用正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript常用正则表达式

JavaScript正则表达式常用技巧

js正则表达式常用函数方法及简单应用

JavaScript 正则表达式 string.replace( regex, "$1" );中“$1”的含义 及邮箱正则表达式

javascript中常用的正则表达式

javascript 常用正则