func-package

函数库, 面向复杂业务场景的 js 类库

表达式随记

通过一些例子来学习正则表达式摘录,js正则函数match、exec、test、search、replace、split

表达式全集

元字符

正则表达式主要依赖于元字符。 元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。以下是一些元字符的介绍:

字符描述
.句号匹配任意单个字符除了换行符。要匹配包括 \n 在内的任何字符,请使用像 (.|\n) 的模式。
[ ]字符种类。匹配方括号内的任意字符。
[^ ]否定的字符种类。匹配除了方括号里的任意字符
*匹配 >=0 个重复的在 * 号之前的字符。例如,zo* 能匹配 z 以及 zoo* 等价于 {0,}
+匹配 >=1 个重复的 + 号前的字符。例如, zo+ 能匹配 zo 以及 zoo ,但不能匹配 z+ 等价于 {1,}
?标记 ? 之前的字符为可选。例如,do(es)? 可以匹配 doesdoes 中的 do? 等价于 {0,1}
|或运算符,匹配符号前或后的字符。例如,`z
\转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
^从开始行开始匹配。
$从末端开始匹配。
{n}n 是一个非负整数。匹配确定的n次。例如, o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的两个 o
{n,}n 是一个非负整数。至少匹配n次。例如, o{2,}不能匹配 Bob中的 o,但能匹配 foooood中的所有o。 o{1,}等价于 o+o{0,}则等价于 o*
{n,m}mn 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 fooooood 中的前三个 oo{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。
(xyz)字符集,匹配与 xyz 完全相等的字符串.
[xyz]字符集合。匹配所包含的任意一个字符。例如,[abc] 可以匹配 plain 中的 a
[^xyz]负值字符集合。匹配未包含的任意字符。例如, [^abc] 可以匹配 plain 中的 p
[a-z]字符范围。匹配指定范围内的任意字符。例如,[a-z] 可以匹配 az 范围内的任意小写字母字符。
[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如,[^a-z] 可以匹配任何不在 az 范围内的任意字符。
字符集简写

正则表达式提供一些常用的字符集简写。如下:

简写描述
.除换行符外的所有字符
\w匹配所有字母数字,等同于 [a-zA-Z0-9_]
\W匹配所有非字母数字,即符号,等同于: [^\w]
\d匹配数字: [0-9]
\D匹配非数字: [^\d]
\s匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
\S匹配所有非空格字符: [^\s]
\f匹配一个换页符
\n匹配一个换行符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符
\p匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符
\b匹配一个单词边界,指单词和空格间的位置。例如,er\b 可以匹配 never 中的 er,但不能匹配 verb 中的 er
\B匹配非单词边界。er\B 能匹配 verb 中的 er,但不能匹配 never 中的 er
零宽度断言
符号描述
?=正先行断言-存在
?!负先行断言-排除
?<=正后发断言-存在
?<!负后发断言-排除
标志 - 模式修正符

标志也叫模式修正符,因为它可以用来修改表达式的搜索结果。 这些标志可以任意的组合使用,它也是整个正则表达式的一部分。

标志描述
i忽略大小写。
g全局搜索。
m多行修饰符:锚点元字符 ^ $ 工作范围在每行的起始。

匹配方法

去除首尾的

//去除首尾的‘/’
input = input.replace(/^\/*|\/*$/g,'');

javascript:; 、javascript:void(0)

'javascript:;'.match(/^(javascript\s*\:|#)/);
//["javascript:", "javascript:", index: 0, input: "javascript:;"]

匹配

var str = "access_token=dcb90862-29fb-4b03-93ff-5f0a8f546250; refresh_token=702f4815-a0ff-456c-82ce-24e4d7d619e6; account_uid=1361177947320160506170322436";
str.match(/account_uid=([^\=]+(\;)|(.*))/ig);
//=> ["account_uid=1361177947320160506170322436"]

匹配一些字符

var str = 'asdf html-webpack-plugin for "index/index.html" asdfasdf';
str.match(/html-webpack-plugin for \"(.*)\"/ig);
console.log(RegExp.$1) //=>index/index.html

关键字符替换

'css/[hash:8].index-index.css'.replace(/\[(?:(\w+):)?(contenthash|hash)(?::([a-z]+\d*))?(?::(\d+))?\]/ig,'(.*)');
//=> css/(.*).index-index.css

替换参数中的值

var str = '<!DOCTYPE html><html manifest="../../cache.manifest" lang="en"><head><meta charset="UTF-8">';
str.replace(/<html[^>]*manifest="([^"]*)"[^>]*>/,function(word){
return word.replace(/manifest="([^"]*)"/,'manifest="'+url+'"');
}).replace(/<html(\s?[^\>]*\>)/,function(word){
if(word.indexOf('manifest')) return word;
return word.replace('<html','<html manifest="'+url+'"');
});
//原:<!DOCTYPE html><html manifest="../../cache.manifest" lang="en"><head><meta charset="UTF-8">
//替换成=> <!DOCTYPE html><html manifest="cache.manifest" lang="en"><head><meta charset="UTF-8">

匹配括号内容

'max_length(12)'.match(/^(.+?)\((.+)\)$/)
// ["max_length(12)", "max_length", "12", index: 0, input: "max_length(12)"]
'hello(world)code(js)javascirpt'.match(/\((\w*)+?\)/gmi);
// => ["(world)", "(js)"]

调换

var name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
//=> "John Doe"

字符串截取

var str = 'asfdf === sdfaf ##'
str.match(/[^===]+(?=[===])/g) // 截取 ===之前的内容
str.replace(/\n/g,'') // 替换字符串中的 \n 换行字符

浏览器版本

navigator.userAgent.match(/chrome\/([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)/i);
//=> ["Chrome/64.0.3282.167", "64", "0", "3282", "167", index: 87, input: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) Ap…L, like Gecko) Chrome/64.0.3282.167 Safari/537.36"]

转义 HTML 标签

'<style> body {margin: 0;}</style> <div>my string</div>'.replace( /[<>](?:(lt|gt|nbsp|#\d+);)?/g, (a, b) => {
if(b) return a;
else {
return { '<': '&lt;', '>':'&gt;',}[a]
}
})

验证

小数点后几位验证

// 精确到1位小数
/^[1-9][0-9]*$|^[1-9][0-9]*\.[0-9]$|^0\.[0-9]$/.test(1.2);
// 精确到2位小数
/^[0-9]+(.[0-9]{2})?$/.test(1.221);

密码强度正则

// 必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/.test("weeeeeeeW2");
//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/.test("diaoD123#");
//输出 true

校验中文

/^[\u4e00-\u9fa5]{0,}$/.test("但是d"); //false
/^[\u4e00-\u9fa5]{0,}$/.test("但是"); //true
/^[\u4e00-\u9fa5]{0,}$/.test("但是"); //true

包含中文正则

/[\u4E00-\u9FA5]/.test("但是d") //true

由数字、26个英文字母或下划线组成的字符串

/^\w+$/.test("ds2_@#"); // false

身份证号正则

//身份证号(18位)正则
/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test("42112319870115371X");
//输出 false

校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

//日期正则,简单判定,未做月份及日期的判定
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
//输出 true
console.log(dP1.test("2017-05-11"));
//输出 true
console.log(dP1.test("2017-15-11"));
//日期正则,复杂判定
var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
//输出 false
console.log(dP2.test("2017-02-29"));
// true

校验文件后缀

var strRegex = "(.jpg|.gif|.txt)";
var re=new RegExp(strRegex);
if (re.test(str)){
}
/(.jpg|.gif)+(\?|\#|$)/.test('a/b/c.jpgsss'); //=> false
/(.jpg|.gif)+(\?|\#|$)/.test('a/b/c.jpg?'); //=> true

用户名正则

//用户名正则,4到16位(字母,数字,下划线,减号)
/^[a-zA-Z0-9_-]{4,16}$/.test("diaodiao");
//输出 true

整数正则

/^\d+$/.test("42"); //正整数正则 -> 输出 true
/^-\d+$/.test("-42"); //负整数正则 -> 输出 true
/^-?\d+$/.test("-42"); //整数正则 -> 输出 true
/^[0-9]+$/.test(25.5455) //正整数正则 -> 输出 false
// 浮点数
/^(?:[-+])?(?:[0-9]+)?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/.test(0.2)

数字正则

可以是整数也可以是浮点数

/^\d*\.?\d+$/.test("42.2"); //正数正则 -> 输出 true
/^-\d*\.?\d+$/.test("-42.2"); //负数正则 -> 输出 true
/^-?\d*\.?\d+$/.test("-42.2"); //数字正则 -> 输出 true

Email正则

//Email正则
/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test("wowohoo@qq.com");
//输出 true
// 1.邮箱以a-z、A-Z、0-9开头,最小长度为1.
// 2.如果左侧部分包含-、_、.则这些特殊符号的前面必须包一位数字或字母。
// 3.@符号是必填项
// 4.右则部分可分为两部分,第一部分为邮件提供商域名地址,第二部分为域名后缀,现已知的最短为2位。
// 最长的为6为。
// 5.邮件提供商域可以包含特殊字符-、_、.
/^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test("wowohoo@qq.com");

传真号码

// 国家代码(2到3位)-区号(2到3位)-电话号码(7到8位)-分机号(3位)
/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/.test('021-5055455')

手机号码正则

//手机号正则
/^1[34578]\d{9}$/.test("13611778887");
//输出 true
//* 13段:130、131、132、133、134、135、136、137、138、139
//* 14段:145、147
//* 15段:150、151、152、153、155、156、157、158、159
//* 17段:170、176、177、178
//* 18段:180、181、182、183、184、185、186、187、188、189
//* 国际码 如:中国(+86)
/^((\+?[0-9]{1,4})|(\(\+86\)))?(13[0-9]|14[57]|15[012356789]|17[03678]|18[0-9])\d{8}$/.test("13611778887");

URL正则

//URL正则
/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test("http://wangchujiang.com");
//输出 true
//获取url中域名、协议正则 'http://xxx.xx/xxx','https://xxx.xx/xxx','//xxx.xx/xxx'
/^(http(?:|s)\:)*\/\/([^\/]+)/.test("http://www.baidu.com");
/^((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)|)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/.test('https://www.baidu.com/s?wd=@#%$^&%$#')
// 必须有协议
/^[a-zA-Z]+:\/\//.test("http://www.baidu.com");

域名正则表达式

/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/.test('blog.csdn.net');
// 输出 true

Mac地址匹配

/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/.test('dc:a9:04:77:37:20');
// 输出 true

浮点数正则表达式

/[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?/.test(+334.4443434343e3);
//输出 true

IPv4地址正则

//ipv4地址正则
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test("192.168.130.199");
//输出 true

日期格式化yyyy-MM-dd正则

/(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])/.test('2019-09-12')
//输出 true

十六进制颜色正则

//RGB Hex颜色正则
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/.test("#b8b8b8");
//输出 true

QQ号码正则

//QQ号正则,5至11位
/^[1-9][0-9]{4,10}$/.test("398188661");//输出 true

微信号正则

//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/.test("jslite"); //输出 true

车牌号正则

//车牌号正则
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/.test("沪B99116") //输出 true

颜色值校验

// HEX 颜色正则
/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test("#ccb2b2")

身份证号

^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

🚧 E.g: 42112319870115371X

军官证

^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$

🚧 E.g: 军字第2001988号士字第P011816X号。 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"

护照

^([a-zA-z]|[0-9]){5,17}$

🚧 E.g: 141234567G12345678P1234567。14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等

统一社会信用代码

^[1-9ANY][1-59]\d{6}[\dA-Z]{8}[\dX][\dA-HJ-NP-RTUW-Y]$

🚧 E.g: 92141127MA0KD1Y64AGB 32100-2015/法人和其他组织统一社会信用代码制度建设总体方案

港澳居民来往内地通行证

^([A-Z]\d{6,10}(\(\w{1}\))?)$

🚧 E.g: H1234567890。H/M + 10位或6位数字

台湾居民来往大陆通行证

^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$

🚧 E.g: 123456781234567890B。新版8位或18位数字, 旧版10位数字 + 英文字母

用户名

^[a-zA-Z0-9_-]{4,16}$

🚧 E.g: jaywcjlove。验证 数字字母_-,不包含特殊字符,长度 4-16 之间。

微信号

^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$

🚧 E.g: jslite。微信号正则,6至20位,以字母开头,字母,数字,减号,下划线。

密码强度(宽松)

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

🚧 E.g: diaoD123, Wgood123。必须是包含大小写字母数字的组合,长度在 8-10 之间。

^[0-9a-zA-Z\u4E00-\uFA29]*$

🚧 E.g: diaoD123, Wgood123。数字字母中文。

密码强度(包含特殊字符)

^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$

🚧 E.g: diaoD123#, Wgood123#$。密码强度正则,最少6位,包括至少1大写字母1小写字母1数字1特殊字符

(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*(.)\1{2})^.{8,22}$

🚧 相同字符不能出现3次,至少8个,至多22个字符组成,包含一个小写字母,一个大写字母,和一个数字

火车车次

^[GCDZTSPKXLY1-9]\d{1,4}$

E.g: G2868, D22, D9, Z5, Z24, Z17

汉字中文

^[\u4e00-\u9fa5]{0,}$

🚧 E.g: 中文, 湖北, 黄冈。不限制文字长度。

^[\u4e00-\u9fa5]{2,6}$

🚧 E.g: 中文, 湖北黄冈。2到6位汉字

中文名字

^(?:[\u4e00-\u9fa5·]{2,16})$

🚧 E.g: 周杰伦, 古丽娜扎尔·拜合提亚尔, 拉希德·本·穆罕默德·本·拉希德

英文姓名

(^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$)

🚧 E.g: Gene Kelly, Fred Astaire, Humphrey Bogart, GaryCooper, Cary Grant, Joan Crawford

URL

^[a-zA-Z]+:\/\/

🚧 E.g: http://www.abc.com, http://, https://

^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

🚧 E.g: https://github.com, https://github.com/jaywcjlove

^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$

🚧 E.g: blog.csdn.net

Mac地址匹配

^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$

🚧 E.g: dc:a9:04:77:37:20

图片后缀

(.jpg|.gif|.png|.jpeg)+(\?|\#|$)

🚧 E.g: a/b/c.jpg?, a/b/c.png, a/b/c.png?good=1

传真号码

^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$

🚧 E.g: 086-021-5055452, 021-5055452。国家代码(2到3位),区号(2到3位),电话号码(7到8位),分机号(3位)

日期(YYYY-MM-DD 格式)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[01])$

🚧 E.g: 1987-04-03, 2024-04-28。月份范围为 01 到 12,日范围分别为 01 到 31、01 到 30、01 到 29(对于闰年的二月)或者 01 到 28

手机号码

^1[34578]\d{9}$

🚧 E.g: 13611778887

^((\+?[0-9]{1,4})|(\(\+86\)))?(13[0-9]|14[57]|15[012356789]|17[03678]|18[0-9])\d{8}$

🚧 E.g: 13611779993, +8613611779993

正则规则详细说明
  • 13段:130、131、132、133、134、135、136、137、138、139
  • 14段:145、147
  • 15段:150、151、152、153、155、156、157、158、159
  • 17段:170、176、177、178
  • 18段:180、181、182、183、184、185、186、187、188、189
  • 国际码 如:中国(+86)

MD5格式(32位)

^[a-f0-9]{32}$

🚧 E.g: a31851770dae6ee96fc886f261c211e7, 99cd2175108d157588c04758296d1cfc

IPv4 地址

(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}

🚧 E.g: 192.168.1.1, 127.0.0.1, 0.0.0.0, 255.255.255.255, 1.2.3.4

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

🚧 E.g: 192.168.1.1, 127.0.0.1, 0.0.0.0, 255.255.255.255, 1.2.3.4

IPv6

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

🚧 E.g: 2001:0db8:85a3:0000:0000:8a2e:0370:7334, FE80:0000:0000:0000:0202:B3FF:FE1E:8329

Email

^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$

🚧 E.g: wowohoo@qq.com

^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$

🚧 E.g: wowohoo@qq.com

正则规则详细说明
  1. 邮箱以a-z、A-Z、0-9开头,最小长度为1.
  2. 如果左侧部分包含-、_、.则这些特殊符号的前面必须包一位数字或字母。
  3. @符号是必填项
  4. 右则部分可分为两部分,第一部分为邮件提供商域名地址,第二部分为域名后缀,现已知的最短为2位。 最长的为6为。
  5. 邮件提供商域可以包含特殊字符-、_、.

十六进制颜色

^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$

🚧 E.g: #b8b8b8, #333

^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$

🚧 E.g: #b8b8b8, #333

日期

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

🚧 E.g: 2017-02-29。对月份日期验证。

版本号

^\d+(?:\.\d+){2}$

🚧 E.g: 0.1.2。格式必须为 X.Y.Z

车牌号

^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](?:((\d{5}[A-HJK])|([A-HJK][A-HJ-NP-Z0-9][0-9]{4}))|[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳])$

🚧 E.g: 鄂A34324, 沪E13359F。包含新能源车牌。

^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$

🚧 E.g: 鄂A34324, 沪E13595。不包含新能源车牌。

小数点后几位

^(0|[1-9]\d*)(.[0-9]{2})$

🚧 E.g: 1.22, 0223.23, 0.00。精确到 2 位小数

^(?!^0(.0{1,2})?$)\d{0,8}(\.\d{1,2})?$

🚧 E.g: 99999999.99, 非零,俩位小数,最大 99999999.99 @cuilanxin

小数

^\d+\.\d+$

🚧 E.g: 0.0, 0.23, 10.54

^(-?\d+)(\.\d+)?$

🚧 E.g: -0.0, 0.23, -10.54

正整数

^\+?\d+$

🚧 E.g: 23

负整数

^-?\d+$

🚧 E.g: -23, -2.34

整数

^\+?-?\d+$

🚧 E.g: 23, 12, +12, -22, -12.55

非负整数(正整数或零)

^\d+$

🚧 E.g: 23, 3.322

数字

^\d{1,}$

🚧 E.g: 0120234234。不包含小数。

^\d{32}$

🚧 E.g: 1223232444475757575757575757575932位纯数字。

数字(QQ号码)

^[1-9][0-9]{4,10}$

🚧 E.g: 398188661。QQ号正则,5至11位。

^\d{5,11}$

🚧 E.g: 398188661。更简单的 QQ 号码正则,5~11位数字组成。

中国邮政编码

^[1-9]\d{5}$

🚧 E.g: 200000。中国邮政编码为 6 位数字。

英文字母

^[A-Z]+$

🚧 E.g: ABCWANG。大写英文字母。

^[a-z]+$

🚧 E.g: abcwang。小写英文字母。

(^[a-z]|[A-Z0-9])[a-z]*

🚧 E.g: TestsJavaScriptRegEx。大驼峰。

端口号

^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$

🚧 E.g: 8080300065535

迅雷链接

^thunderx?:\/\/[a-zA-Z\d]+=$

🚧 E.g: thunder://QUFodHRwOi0vdG0vbC5sdS90ZXN0LnppcFpa

ed2k链接

^ed2k:\/\/\|file\|.+\|\/$

🚧 E.g: ed2k://|file|[xxx.com][%E8%8B%B1%E9%9B%84%E6%9C%AC%E8%89%B23.mp4|/

磁力链接

^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$

🚧 E.g: magnet:?xt=urn:btih:608FA22181A2614BAE9160763F04FCB7ED296B9E

时间

^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$

🚧 E.g: 21:54:5500:23:2324 小时制时间格式 HH:mm:ss,并且验证时间。

^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$

🚧 E.g: 12:54:5501:23:2312 小时制时间格式 HH:mm:ss,并且验证时间。

HTML标记

<(\S*?)[^>]*>.*?</\1>|<.*?/>

🚧 E.g: <div>title</div>, <head>title</head>

HTML注释

<!--(.*?)-->

🚧 E.g: <!-- hello -->

工具

工具推荐