正则表达式基础入门学习教程

2018-03-1420:49:00后端程序开发Comments3,478 views字数 8905阅读模式

概述

正则表达式是一种被用于匹配字符串的字符匹配模式。多用于表单验证。正则表达式:regular expression,简称RegExp。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

创建正则表达式最简单的方式使用正则字面量。

字面量:用两个/做界定符。一般会将字面量赋值给一个变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

正则表达式可以使用一些字符串方法或正则方法进行操作:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

字符串的方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • split()根据匹配字符串切割父字符串,返回子串组成的数组。
  • match()使用正则表达式与字符串相比较,返回一个包含匹配结果的数组。
  • search()对正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下标。
  • replace()用正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串,返回新的匹配之后的字符串。

正则表达式方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • exec()在目标字符串中执行一次正则匹配操作,返回的是第一次匹配的子串的数组。
  • test()测试当前正则是否能匹配目标字符串,返回true或false。

不同的数据类型又自己的方法和属性,使用时必须调用正确,下面分别介绍几种方法的使用。

字符串方法

  • plit()根据匹配字符串切割原字符串。split方法传递的参数是分隔符,可以是str或者reg,找到分隔符之后就从str中删除,返回子串数组。

如果没有找到分隔符,那么返回的数组包含的是一整个str组成元素的数组。如果分隔符为空字符串“”,返回的是字符串每个字符组成元素的数组。 返回值:由切割后的子字符串组成数组。可以用来将用户输入的不规范的字符串转为正确的Array。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

例:根据空格切割字符串:'aa bbb c dd eeeeee'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

'aa bbb    c dd eeeeee'.split(/\s+/);   //["aa","bbb","c","dd","eeeeee"]

\s:表示空白字符;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

+:表示前面的一个符号代表的字符可以出现一次或者多次文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • earch()对正则表达式或指定字符串进行搜索,传入的参数是字符串或者reg,返回第一个出现的匹配项的下标(类似indexOf)。

返回值:子串或正则匹配结果在父字符串中的第一次出现的位置的下标。search搜索只找到第一次搜索到的位置下标,所以全局标志也就不起作用了。如果匹配的子串在父字符串中没有对应的字符,返回结果就是-1.(可以利用search匹配字符串有无在表格中进行关键字搜索,条件判断是看是否等于-1)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

function withSearch(str){
            var newStr = "";
            for(var i =0; i<str.length; i++){
                if(newStr.search(str[i]) == -1){
                    newStr += str[i];
                }
            }
            return newStr;
        }
        console.log(withSearch('abcdde'));     //abcde
  • match()使用正则表达式与字符串相比较,接受参数只有一个要么是正则表达式,要么是reg对象,返回一个包含匹配结果的数组。本质上和调用正则的exec方法相同。

返回值:是由匹配结果组成的数组。和split一样返回的是数组,但是match返回的是第一个匹配的子串,不过可以应用全局标志g,搜索全部。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

在 'abbcccbbbbbddbbbdabbb' 中查询重复 'b' 字符串文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

'abbcccbbbbbddbbbdabbb'.match(/b+/);     //['bb']
  • replace()用正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。 参数:传递两个参数,第一个是正则或匹配的字符串,第二个是要替换的新的内容或者函数。

返回值:是一个新的字符串,原始字符串不发生变化。如果第一个参数是字符串,那么只会替换第一个子字符串;想要替换所有子串,只有一个办法就是传入reg,同时指定g标志。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

例:过滤字符串中空格:'aa b c d e f ' => "aabcdef" 使用全局界定符g进行全局匹配和替换。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

str.replace(/\s+/g, ‘’);      //用空字符串替换匹配的空白

正则方法

  • exec()在字符串中寻找匹配字符串,并返回一个包含匹配结果的数组。返回的数组很特别的带了两个属性,可以通过调用index属性和input属性查看匹配的子串在字符串中的位置,而input表示应用reg的字符串。

参数:要查找的字符串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

exec方法即使在模式中设置了全局标志g,每次也只会返回一个匹配项。在不设置g时,同一个str上多次调用exec()都始终返回第一个匹配项;而设置了g,每次调用exec()都会在字符串中继续查找新的匹配项,知道搜索到字符串末尾为止。lastIndex在全局模式下回随着调用而改变++。《高级程序设计》文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • test() 检测字符串是否匹配正则表达式,传入的参数是字符串,如果字符串中有正则匹配的就返true。 正则表达式中如果没有限制开头也没有限制结尾,只要字符串中包含正则匹配的部分,就会返回一个true的值,否则返回false。

test方法经常用在if判断语句中作为条件来使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

判断'aaddccddabcddeeddfff'是否包含'abc'字符串文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

/abc/.test('aaddccddabcddeeddfff');  //true

正则表达式的术语和操作符

正则表达式的组成:由一些普通字符和一些特殊字符(又叫元字符--metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。 特殊字符: javascript中常用正则的特殊字符有文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

( ) [ ] { } \ ^ $ | ? * + . 若想匹配这类字符必须用转移符号 \ 如:\(,\^,\\文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 精确匹配

正则表达式中是一些普通字符组成,在进行字符串匹配时,需要进行精确匹配,比如/good/,匹配时,字符串中必须包含g,o,o,d四个字符,而且顺序不能发生变化,中间也不允许出现其他字符,也就是说必须包含”good”字符串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 预定义特殊字符

预定义特殊字符:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\t /\t/制表符,缩进 eg: console.log(/\t/.test('’)),表示匹配一个缩进或制表符文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\n /\n/回车符 eg: console.log(/\n/.test(aaabbb)); ,表示匹配一个回车换行文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

问题:""不能包裹一个包含回车换行的字符串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

解决方法:将引号换成数字1前面的``引号,就可以包括回车。 \f /\f/换页符 \b /\b/空格,表示匹配的是一个空格,\b可以搭配字符匹配作为边界的查找标识符,在边界处详细讲。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 字符集
    字符集:表示一类中任何一个字符都可以匹配,核心是[]类对应的是一个字符。 字符集写法:[一类字符]

简单类:正则的多个字符对应一个字符,我们可以用[]把它们括起来,让[]这个整体对应一个字符 o[abc]z →oaz,obz,ocz文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

范围类:有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线。 [a-z]、[0-9]、[A-Z]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

组合类:允许用中括号匹配不同类型的单个字符[a-zA-Z0-9] [a-zA-Z_$][a-zA-Z0-9_$] 变量名的命名规则 [0-9a-z]:表示可以匹配小写字母或者数字。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

负向类:[]内部最前面加个元字符^进行取反,表示匹配不能为括号里面的字符。 [^a]:表示只要不是a都能匹配成功。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 修饰符

g 全局修饰符,再查找时不会找到第一次结果后就结束,而是在找到全局范围内所有结果后再结束。 global:全球的、全局的。 书写位置:在正则符号的后面//g.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

i 修饰符用于执行对大小写不敏感的匹配。case-insensitive 书写位置:在正则符号的后面//i文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

m表示多行模式,忽略换行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 边界

^开头注意不能紧跟于左中括号的后面 书写位置:写在//正则符号内部的开始位置,表示后面的字符必须匹配成功,而且需要作为字符串的开头。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

$结尾 书写位置:写在//正则符号内部的结束位置,表示$前面的字符必须匹配成功,而且需要作为字符串的结束。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

综合使用^和 $,分别界定字符串的开头和结尾,表示中间部分的字符必须匹配成功,而且所有字符必须位于开头,也必须位于结尾。也就是说中间的部分就是字符串的全部。

\b单词边界,用于查找位于单词的开头或结尾的匹配。区间比^$要小,只作用在单词。 \b会搭配其他字符进行匹配,其他字符必须先匹配成功,如果\ba,要先匹配一个a字符,还要求a位于一个单词的开始位置,如果c\b,表示要匹配一个c字符,还要求c必须位于一个单词的结尾。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

如果前后都有\b,表示内部匹配的结果必须是一个单独的完整的单词。

\B非单词边界,用于查找不处在单词的开头或结尾的匹配。 \B也要搭配其他符号进行匹配,表示前面后后面的匹配的字符,除了要匹配成功之外,还不能位于一个单词的开头或结尾。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 预定义类

本质就是将最常用的一些特殊类的字符集进行一个简化书写。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

[^\n\r]除了换行和回车之外的任意字符 匹配:除了回车和换行之外其他所有字符,比如数字、字母、汉字、特殊符号、空格、缩进等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\d[0-9]数字字符(digital) 匹配:匹配一个任意的数字字符。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\D[^0-9]非数字字符 匹配:非数字字符,只要不是数字都能匹配成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\s[ \t\n\x0B\f\r]空白字符(space) 匹配:可以匹配所有的空白,包括缩进、回车、换行、空格、换页。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\S[^ \t\n\x0B\f\r]非空白字符 匹配:表示所有非空白的字符,除了空白都能匹配。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\w[a-zA-Z_0-9]单词字符(所有的字母/数字/下划线) 匹配:所有的字母(大小写)、数字、下划线。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

\W[^a-zA-Z_0-9]非单词字符 匹配:除了数字、字母、下划线,其他都能匹配。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 量词

有时会遇到某个正则符号需要连续匹配多次,可以利用量词进行次数描述。 使用{}包裹数字,表示前面的一个字符可以出现多少次。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

{n}硬性量词对应零次或者n次 表示:n是几,前面的符号需要连续出现对应的几次。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

{n,m}软性量词至少出现n次但不超过m次(中间不能有空格) 表示:前面的字符必须出现至少n次,最多不超过m次。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

{n,}软性量词至少出现n次(+的升级版) 表示:前面的字符可以出现n次及以上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

?{0,1}软性量词出现零次或一次文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

*{0,}软性量词出现零次或多次(任意次)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

+{1,}软性量词出现一次或多次(至少一次)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

量词只能修饰前面的一个字符,不能直接修饰前面多个字符,想要操作多个要把想操作的字符串用小括号括起来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 或操作符

可以使用竖线(|)字符表示或者的关系。 如果没有任何限制的情况下,或操作符会将整体正则表达式分成两部分。 只要有一种情况匹配成功都能返回true。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

如果我们想匹配a和c中匹配d或b,需要将d和b的或关系放在小括号内,缩小或操作符的范围。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 分组

虽然量词的出现,能帮助我们处理一排密紧密相连的同类型字符。但这是不够的,我们用中括号表示范围内选择,大括号表示重复次数。如果想获取重复多个字符,我们就要用小括号进行分组了。 使用小括号分组后,就可以对内部字符进行整体的控制。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 分组的反向引用

反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,通过“\编号(在表达式中)”,“$编号(在表达式外)”进行引用。从1开始计数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

正则中如果有小括号的分组,会在字符串中找到匹配的子字符串,可以将子字符串结果拿到正则中进行二次使用,或者正则表达式之外进行二次调用。 正则表达式中有多个小括号的话,按照编号1,2,3……进行编号,从左往右。exec test str的replace都可以使用这种方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

正则中:使用\1,反向使用子串1的结果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

正则外面:使用$1,反向使用子串1的结果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

字符串的replace方法的反向引用。 第一个参数:正则表达式,内部有小括号的话,可以进行编号,按顺序小括号分别对应第一小组,第二小组...。 第二个参数:可以利用分组匹配结果,进行反向引用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

更常用的方式,给replace第二个参数设置为一个替换函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

注意:

1.函数的参数位置,第一个必须写match,后面的参数可以使用反向引用的编号$,$2……文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

2.函数必须有返回值,返回值的结果才是替换字符串的内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

应用:找出字符串中最长的重复子串

 function demo(str) {
        var arr = str.split(''); //把字符串转换为数组
        str = arr.sort().join(''); 

        var value = ‘’;     //用来存放出现最多的substr的中间变量
        var index = 0;     //用来存放最大长度
            
       var re = /(\w)\1+/g; //
           
        str.replace(re, function ($0, $1) {
            //alert($0); 代表每次匹配成功的结果 : aa dd jj kk l sssssssssssssssss
            //alert($1); 代表每次匹配成功的第一个子项,也就是\w: a d j k l s 

        if (index < $0.length) { //如果index保存的值小于$0的长度就进行下面的操作
            index = $0.length; // 这样index一直保存的就在最大的长度
            value = $0; //value保存的是出现最多的这个字符
        }
    });
        alert('最多的字符:' + value + ',重复的次数:' + index); 
    }
  • 中文字符

匹配中文:[\u4e00-\u9fa5]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

常用正则表达式

网上的一些常用方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 用户名:4-16位,字母、数字、下划线、减号. 同时包括的内容可以通过放到一个类中,+进行多次选择。
 var pattern = /^[a-zA-Z0-9_-]{4,16}$/;
  • 密码强度:最少6位,包括1个大写字母,1个小写,1个数字,1个特殊符号
var pattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;

(?<= )是连在一起的格式,不要把=单独拿出。与之对应的格式是(?<! )。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

(?<=\s*)\d+ 匹配的是 "abc 123abc""abc123abc"中的"123" 匹配的是:前面有"重复0次或多个空格"后面紧跟的是数字的数字部分; 注:匹配的字符串只有\d+,不包括\s*文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。 比如\b\w+(?=ing\b),匹配以 ing 结尾的单词的前面部分(除了 ing 以外的部分),如查找 I'm singing while you're dancing.时,它会匹配 sing 和 danc。 (?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式 exp。比如(?<=\bre)\w+\b 会匹配以re开头的单词的后半部分(除了 re以外的部分),例如在 查找reading a book时,它匹配ading。 假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了), 你可以这 样查找需要在前面和里面添加逗号的部分:((?<=\d)\d{3})*\b,用它对 1234567890 进行查 找时结果是234567890。 下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次 强调,不包括这些空白符)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

  • 数字:^[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-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
  • 身份证号(15位、18位数字):^\d{15}|\d{18}$
  • 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,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个月(01~09和1~12):^(0?[1-9]|1[0-2])$
  • 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
  • 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]$
  • 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  • 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  • HTML标记的正则表达式:<(\S*?)[^>]>.?</\1>|<.*? />
  • 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  • 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  • 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  • IP地址:\d+.\d+.\d+.\d+ (提取IP地址时有用)
  • IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

作者:ACodingIceBear
链接:https://juejin.im/post/5a3c6e6051882512ae12d630
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/1758.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/1758.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定