正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在不少文本编辑器里,正则表达式一般被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操做。
在不少文本编辑器里,正则表达式一般被用来检索、替换那些符合某个模式的文本。(为字符串定义规则,为输入内容定义规则!)
正则表达式用于字符串处理、表单验证等场合,实用高效。前端
var 变量名= new RegExp(/表达式/);
var 变量名= /表达式/; console.log(regexp1.test(345)); console.log(/\d/.test(567));(直接使用)
正则对象方法,检测测试字符串是否符合该规则,返回true和false,参数(测试字符串)正则表达式
使用语法:Boolean = 表达式.test("要验证的内容"); console.log(/\d/.test(567)); 验证 567 符不符合 \d 的规范
[^\n\r] 除了换行和回车以外的任意字符(“”不行) \d [0-9] 数字字符 \D [^0-9] 非数字字符 \s [ \t\n\x0B\f\r] 空白字符 \S [^ \t\n\x0B\f\r] 非空白字符 \w [a-zA-Z_0-9] 单词字符 \W [^a-zA-Z_0-9] 非单词字符
/andy/.test(“andy”) // true /andy/.test(“andylv”) // true /andy/.test(“an”) // false 一句话,只要完整包含了andy 就能够了(有他就行)
/[andy]/.test("andy"); // true /[andy]/.test("an"); // true /[andy]/.test("ady"); // true /[andy]/.test("anll"); // true /[andy]/.test("assd"); // true /[andy]/.test("ss"); // false /[3aH8]/.test("ss"); // false
中括号内,前面加个元字符^进行取反,不是括号里面的字符(一部分也不行)。
(能够不够,可是不能多)(不够和正好,返回false;多了或者没有返回true)编辑器
console.log(/[^abc]/.test("iiii"));//true console.log(/[^abc]/.test("aiiii"));//只有一部分睁一只眼闭一只眼true console.log(/[^abc]/.test("abc"));//恰好为false console.log(/[^abc]/.test("b"));//不够为false console.log(/[^abc]/.test("bcdef"));//只有一部分睁一只眼闭一只眼true console.log(/[^abc]/.test("abcdef"));//只有一部分睁一只眼闭一只眼true 注意: 这个符号 ^ 必定是写到方括号里面
有时匹配的东西过多,并且类型又相同,所有输入太麻烦,咱们能够在中间加了个横线函数
console.log(/[a-c]/.test("dghhj")); //false console.log(/[a-c]/.test("b")); //true
用中括号匹配不一样类型的单个字符。 console.log(/[a-m1-5]/.test("b"))//true
正则表达式主要是针对字符串进行操做
,能够简化对字符串的复杂操做,其主要功能有匹配
、切割
、替换
、获取
。
检查字符串是否符合正则表达式中的规则,有一次不匹配,则返回false。如:工具
String str="abc"; String reg="[a-zA-Z]\\d?";//次表达式表示字符串的第一位只能是字母,第二位只能是数字或没有 boolean flag=str.matches(reg);//返回结果为true
所谓切割,便是按必定的规则将字符串分割成多个子字符串,如:测试
String str="zhangsan,lishi,wangwu"; String reg=",";//表示以逗号做为切割符 String[] arr=str.split(reg);//返回结果为{“zhangsan”,"lisi","wangwu}
即将字符串中符合规则的字符替换成指定字符,如:编码
String str="sfhjhfh136hjasdf73466247fsjha8437482jfjsfh746376"; str.replaceAll("\\d{3,}","#");//表示将连续出现三个或三个以上的数字替换成“#”
即获取与规格相符的字符串,其步骤为:
①将正则表达式封装成对象
②让正则表达式和要操做的字符串相关联,得到匹配器对象
③获取正则匹配引擎
④经过引擎对符合规则的子串进行操做:如设计
String str="ming tian jiu yao fang jia le"; String reg="\\b[a-z]{3}\\b";//"//b"表示单词边界 Pattern p=Pattern.compile(reg); Matcher m=p.matcher(str);// 得到匹配器 m.find();
^ 会匹配行或者字符串的起始位置
注:^在[]中才表示非!这里表示开始
$ 会匹配行或字符串的结尾位置
^$在一块儿 表示必须是这个(精确匹配)code
// 边界能够精确说明要什么 console.log(/lily/.test("lilyname")); // true console.log(/^lily$/.test("lily")); // true console.log(/^lily$/.test("ly")); // false console.log(/^andy$/.test("andy")); // true 这个的最终意思就是 说, 必须是 andy 这四个字母
(多个字母,重复最后一个) * (贪婪) 重复零次或更多 (>=0) + (懒惰) 重复一次或更屡次 (>=1) ? (占有) 重复零次或一次 (0||1) 要么有 要么没有 {} 重复多少次的意思 能够有多少个 您的银行卡密码只能是 6位 {6} {n} n次 (x=n) {n,} 重复n次或更多 (x>=n) {n,m} 重复出现的次数比n多但比m少 (n<=x<=m) * {0,} + {1,} ? {0,1} x|y 一个 | x 或者 y(没有&,用的是,代替的) ()提升权限,有限计算
replace() 方法用于在字符串中用一些字符替换另外一些字符,或替换一个与正则表达式匹配的子串。 语法格式:(返回值是新字符串)
须要匹配的对象.replace(正则式/字符串,替换的目标字符)
正则表达式的匹配模式支持的2个标志
g:表示全局模式(global),即模式将被应用于全部字符串而非发现一个而中止
i:表示不区分大小写(ease-insensitive)模式,在肯定匹配想时忽略模式与字符串的大小写regexp
封装本身的trim 函数 function trim(str) { return str.replace(/(^\s+)|(\s+$)/g,""); // 去掉前面和后面的空格 }
数字:^[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)$
汉字:^[\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]+
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[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ 电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 国内电话号码(0511-440522二、021-87888822):\d{3}-\d{8}|\d{4}-\d{7} 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$) 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$) 账号是否合法(字母开头,容许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个月(01~09和1~12):^(0?[1-9]|1[0-2])$ 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$ 钱的输入格式: 有四种钱的表示形式咱们能够接受:”10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:^[1-9][0-9]*$ 这表示任意一个不以0开头的数字,可是,这也意味着一个字符”0”不经过,因此咱们采用下面的形式:^(0|[1-9][0-9]*)$ 一个0或者一个不以0开头的数字.咱们还能够容许开头有一个负号:^(0|-?[1-9][0-9]*)$ 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,由于钱总不能是负的吧。下面咱们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$ 必须说明的是,小数点后面至少应该有1位数,因此”10.”是不经过的,可是 “10” 和 “10.2” 是经过的:^[0-9]+(.[0-9]{2})?$ 这样咱们规定小数点后面必须有两位,若是你认为太苛刻了,能够这样:^[0-9]+(.[0-9]{1,2})?$ 这样就容许用户只写一位小数.下面咱们该考虑数字中的逗号了,咱们能够这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 1到3个数字,后面跟着任意个 逗号+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|M][l|L]$ 中文字符的正则表达式:[\u4e00-\u9fa5] 双字节字符:[^\x00-\xff] (包括汉字在内,能够用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)) 空白行的正则表达式:\n\s*\r (能够用来删除空白行) HTML标记的正则表达式:<(\S?)[^>]>.?|<.? /> ( 首尾空白字符的正则表达式:^\s|\s$或(^\s)|(\s$) (能够用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),很是有用的表达式) 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始) 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字) IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
若是你以为这篇文章对你有所帮助,那就顺便点个赞
吧,点赞收藏
不迷路~
黑芝麻哇,白芝麻发,黑芝麻白芝麻哇发哈!
前端哇发哈