1、学习正则
^ 和 $ 夹在中间表示必须完全匹配
(^\s*)表示从第一个位置开始匹配至少一个空格或控制符
(\s*$)表示从最后一个位置开始匹配至少一个空格或控制符
(^\s*)|(\s*$)前后匹配至少一个空格或控制符
2、兜兜使用过的正则【本人测试通过】
(1) ipv4 正则:172.16.0.0
var ipStr4 = /^(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))$/;
(2)私网地址:172.16.0.0/12
var ipStr = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)(\/(\d|[1-2]\d|3[0-2]))?$/;
(3)ipv6 正则:2409:8a55:4222:f1:307c:f263:fc95:64a8
var ipStr6 = /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/;
(4)请输入:5~22个字符,可包含英文、数字和‘-’,且‘-’不能在开头和结尾
var a = /^[A-Za-z0-9][A-Za-z0-9\-]{3,20}[A-Za-z0-9]$/
(5)请输入:0~65535 的端口
var a = /^(^[1-9]\d{0,3}$)|(^[1-5]\d{4}$)|(^6[0-4]\d{3}$)|(^65[0-4]\d{2}$)|(^655[0-2]\d$)|(^6553[0-5]$)/
请输入大于0且最大值为 999999.99的数字(有问题)
/^0\.([1-9]|\d[1-9])$|^[1-9]\d{0,5}\.\d{0,2}$|^[1-9]\d{0,5}$/
请输入1到9999的整数
/^[1-9]{1}\d{0,3}$/
输入值大于等于1
/^[1-9]\d*$/
最多可输入15个字的汉字、字母、数字,不支持符号和空字符
/^[\u4E00-\u9FA5\uF900-\uFA2D\w]{1,15}$/
英文逗号 转成 中文逗号
replace(/,/ig,',’)
输入 0 到 60 的整数
/^60$|^([1-5]\d)$|^\d?$/
请输入1到10的整数
/^([1-9]|10)$/
首尾不能为空或超过50个字符,不能含有特殊字符/\\?"\'
/^(?!\s)(?!.*[\\\/\?"']).{0,49}[^\s]$/
首尾不能为空,中间可以输入空格,且长度不过超过 50:
/^(?!\s).{0,49}[^\s]$/
首尾不能为空,中间可以输入空格:
/(^\S+.*|.*\S+$)/
不可以输入空格,且长度不能超过 50:
/^([^ ]){1,50}$/
首尾可以输,中间不可以输
/^\s*\S+s*$/
首尾可以输,中间不可以输,且长度不超过 50:(有问题)
/^(\s*\S+s*)[0, 9]$/
首尾,中间都可以输空格
/(^\s+.*|.*\s+$)/
小于99.99的任意数字 小数点保留2位:
/^(\-|\+)?\d{1,2}(\.\d{1,2})?$/
最大数为 999999.99的值
/^\d{1,6}(\.\d{1,2})?$/
请输入 1-999999
/^[1-9]{1}\d{0,5}$/
请输入大于0且最大数是365
/^(3[0-6][0-5]|2[0-9][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])$/
请输入 0.01 到 999999.99
/^0\.([1-9]|\d[1-9])$|^[1-9]\d{0,5}\.\d{0,2}$|^[1-9]\d{0,5}$/
支持小数点到两位小数和纯数字 0.01-99999999(大于0)
/^0\.([1-9]|\d[1-9])$|^[1-9]\d{0,8}\.\d{0,2}$|^[1-9]\d{0,8}$/
长度5-18验证:
/^[\dA-Za-z]{5,18}$/
长度为3-20的所有字符
/^.{3,20}$/
仅限汉字、字母、数字,不能存在特殊字符、符号,最大支持10个长度
/^[a-zA-Z0-9\u4E00-\u9FA5]{1,50}$/
/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{1,50}$/
大于1的整数
/^([1-9]\d+|[2-9])$/
输入大于 0 的正整数
/^[1-9]\d*$/
数字
/^[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+))$/
0.0~3.0
/^(([0-2]{1}(.[0-9]){0,1})|([3]{1}(.[0]){0,1}))?$/
0.00~100.00
/^((\d|[1-9]\d|100)(\.\d{1,2})?)$ 或 ^(([0-9]{1,2}|100)(\.\d{1,2})?)$/
禁止输入含有~的字符
/^[^~\x22]+$/
3、常用正则
(?!_) 不能以_开头
(?!.*?_$) 不能以_结尾
[a-zA-Z0-9_\u4e00-\u9fa5]+ 至少一个汉字、数字、字母、下划线
$ 与字符串结束的地方匹配
匹配中文
/^[\u4e00-\u9fa5]$/
英文字母
/^[a-zA-Z]$/
数字
/^[0-9]$/
匹配中文,英文字母和数字及下划线
/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/
匹配中文,英文字母和数字及下划线,同时判断输入长度
/^[\u4e00-\u9fa5_a-zA-Z0-9_]{4,10}$/
只含有汉字、数字、字母、下划线,下划线位置不限
/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/
由数字、26个英文字母或者下划线组成的字符串
/^\w+$/
2~4个汉字
/^[\u4E00-\u9FA5]{2,4}$/
最长不得超过7个汉字,或14个字节(数字,字母和下划线)正则表达式
/^[\u4e00-\u9fa5]{1,7}$|^[\dA-Za-z_]{1,14}$/
匹配双字节字符(包括汉字在内)
/^[^x00-xff]$/
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式
/^ns*r$/
评注:可以用来删除空白行
匹配首尾空白字符的正则表达式:
/^s*|s*$/
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:
/^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
评注:表单验证时很实用
手机号:
/^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/
身份证:
/^\d{15}$)|(^\d{17}([0-9]|X|x)$/
匹配网址URL的正则表达式:
[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/
评注:表单验证时很实用
匹配国内电话号码:
/^d{3}-d{8}|d{4}-d{7}$/
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:
/^[1-9][0-9]{4,}$/
评注:腾讯QQ号从10000开始
匹配中国邮政编码:
/^[1-9]d{5}(?!d)$/
评注:中国邮政编码为6位数字
匹配身份证:
/^d{15}|d{18}$/
评注:中国的身份证为15位或18位
匹配ip地址:
/^d+.d+.d+.d+$/
评注:提取ip地址时有用
4、匹配特定数字
^[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*$ //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$ //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$ //匹配浮点数
^[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)
5、匹配特定字符串
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
6、只能输入
只能输入数字:“^[0-9]*$”
只能输入n位的数字:“^d{n}$”
只能输入至少n位数字:“^d{n,}$”
只能输入m-n位的数字:“^d{m,n}$”
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
只能输入非零的正整数:“^+?[1-9][0-9]*$”
只能输入非零的负整数:“^-[1-9][0-9]*$”
只能输入长度为3的字符:“^.{3}$”
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
只能包含字符、数字和下划线。
验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
只能输入汉字:“^[u4e00-u9fa5],{0,}$”
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
正确格式为:“01”“09”和“1”“31”。
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/.*|/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
7、问题一:)最近用的框架是 react ,form 表单验证的时候,遇到一个问题:动态校验字数。
通常情况下,我们是写:/^[\u4e00-\u9fa5]{1,20}$/
如果是动态的话应该:RegExp('^[\u4e00-\u9fa5]{1,' + a + '}$', 'I’)
一开始我用了模版字符串,发现不对,因为 模板的${}和你正则的$ 是冲突的。