常见数据格式的正则表达式验证 | GCidea's blog
目录
- 1. 前言
- 2. 正则表达式的学习
- 3. 验证输入是否为空
- 4. 验证输入是否为英文字母(大小写)+数字
- 5. 验证输入是否为英文字母(大小写)+数字+下划线
- 6. 验证输入是否为汉字
- 7. 验证输入是否为整数
- 8. 验证输入是否为正整数
- 9. 验证输入是否为负整数
- 10. 验证输入是否为非负整数(正整数 + 0)
- 11. 验证输入是否为非正整数(负整数 + 0)
- 12. 验证输入是否为n位的数字
- 13. 验证输入是否为至少n位的数字
- 14. 验证输入是否为m~n位的数字
- 15. 验证输入是否为浮点数
- 16. 验证输入是否为正浮点数
- 17. 验证输入是否为负浮点数
- 18. 验证输入是否为非负浮点数
- 19. 验证输入是否为非正浮点数
- 20. 验证输入是否为有两位小数的正实数
- 21. 验证输入是否为有1~3位小数的正数或负数
- 22. 验证输入是否为email地址
- 23. 验证输入是否为中国邮政编码
- 24. 验证输入是否为URL
- 25. 验证输入是否为身份证号码
- 26. 验证输入是否为一年的12个月
- 27. 验证输入是否为一月的31天
- 28. 验证输入是否为YYYY-MM-DD格式的日期
- 29. 验证输入是否为YYYY-MM-DD hh:mm:ss格式的日期
- 30. 验证输入是否为hh:mm:ss格式的时间
- 31. 验证输入是否为手机号码
- 32. 验证输入是否为中国座机号码
- 33. 验证输入是否为IPV4地址
- 34. 验证输入是否为IPV6地址
- 35. 验证输入是否为密码要求的格式
- 36. 验证输入密码安全强度
- 37. 匹配首尾空白字符
- 38. 匹配中文标点符号
- 39. 匹配邮箱地址

前言
正则表达式是一种强大的工具,可以在很多场景下对我们需要的内容进行快速匹配过滤。比如,在前端提交表单时,就可以通过编写合理的正则表达式对用户输入进行首次过滤(当然服务端程序在接收到数据后一样要进行严格的数据检查,保证程序正常运行,防止通过postman等工具绕过前端验证进行恶意攻击。)
正则表达式的学习
网上有很多系统学习正则表达式的资源,掌握基本的语法和相关机制是实现常见数据格式验证的基础。快速了解正则表达式的内容,推荐廖雪峰JavaScript教程中的正则RegExp部分。
需要单独说明的是,以下提到的各种数据格式的验证,都采用JavaScript中的如下写法:
1 | var reg = /正则表达式/; |
验证输入是否为空
表达式
1 | var reg = /^$/; |
解释
^匹配开始,$匹配结束,上述表达式的意思是匹配的字符串开始结束之间没有内容。test()方法返回true则表示输入内容为空(输入空格等并不为空)。
验证输入是否为英文字母(大小写)+数字
表达式
1 | var reg = /^[a-zA-Z0-9]+$/; |
解释
分别列出小写a-z,大写A-Z,数字0-9即可。
验证输入是否为英文字母(大小写)+数字+下划线
表达式
1 | var reg = /^\w+$/; |
解释
正则表达式中\w就表示匹配一个数字或者字母,也包含了下划线。
验证输入是否为汉字
表达式
1 | var reg = /^[\u4e00-\u9fa5]{0,}$/; |
解释
\u4e00是汉字“一”,\u9fa5是汉字“龥”,该范围包含了汉字的Unicode编码。
验证输入是否为整数
表达式
1 | var reg = /^\-?[1-9]\d*$/; |
解释
- 这个表达式可以用来匹配除0以外的任意正负整数。
- 开始是一个负号“-”,用来匹配负数的负号,?表示非贪婪匹配模式(也就是说匹配尽量少的内容,一旦匹配上就不再考虑后面的字符串)。并且?表示匹配其前面的内容0次或者1次,这样就包括了正数和负数都可以。注意这里的
-号后面不能接*或者+,必须只能至多有一个。 - [1-9]则表示匹配一个1-9的数字,作为整个这个整数的开头。注意这里必须将第一位这样处理,因为不能为0,无法和后面的\d*合并。
- \d*则表示后续接的0个或多个数字,和前面的部分共同构成整数。
验证输入是否为正整数
表达式
1 | var reg = /^\+?[1-9]\d*$/; |
解释
- 开始可以有一个正号(最多一个),当然也可以没有。并且由于
+在正则表达式中有特殊含义,因此必须转义。 - [1-9]则表示匹配一个1-9的数字,作为整个这个整数的开头。注意这里必须将第一位这样处理,因为不能为0,无法和后面的\d*合并。
- \d*则表示后续接的0个或多个数字,和前面的部分共同构成整数。
验证输入是否为负整数
表达式
1 | var reg = /^\-[1-9]\d*$/; |
解释
- 一开始必须有一个负号,并且由于
-在正则表达式中有特殊含义,因此转义。 - [1-9]则表示匹配一个1-9的数字,作为整个这个整数的开头。注意这里必须将第一位这样处理,因为不能为0,无法和后面的\d*合并。
- \d*则表示后续接的0个或多个数字,和前面的部分共同构成整数。
验证输入是否为非负整数(正整数 + 0)
表达式
1 | var reg = /^((\+?[1-9]\d*)|(0))$/; |
解释
- 正数前面可能会有正号,
\+?限制有0个或者1个正号。 - 随后是一位1-9的数字
[1-9],再随后是任意多位0-9的数字\d*,排除掉“+02”这样无意义的写法。 - 对于0,直接匹配(0)。
- 上述情况,居其一,用或
|区分,整体上必须还用括号()包起来,否则无法正确过滤”-0”这种情况。
验证输入是否为非正整数(负整数 + 0)
表达式
1 | var reg = /^((\-[1-9]\d*)|(0))$/; |
解释
- 对于0,直接匹配(0)。
- 对于小于零的负整数,开头是负号
-,随后是一位1-9的数字[1-9],再随后是任意多位0-9的数字\d*。 - 上述两种情况,居其一,用或
|区分,整体上必须还用括号()包起来,否则无法正确过滤”-0”这种情况。
验证输入是否为n位的数字
表达式
1 | var reg = /^\d{n}$/; //具体使用时n取某个特定数字 |
解释
{n}表示\d数字的个数。
验证输入是否为至少n位的数字
表达式
1 | var reg = /^\d{n,}$/; |
解释
{n,}表示\d数字的个数范围。
验证输入是否为m~n位的数字
表达式
1 | var reg = /^\d{m,n}$/; |
解释
{n,m}表示\d数字的个数范围。
验证输入是否为浮点数
表达式
1 | var reg = /^(\-?\d+)(\.\d+)?$/; |
解释
- 开始是一个负号“-”,用来匹配负数的负号,?表示非贪婪匹配模式(也就是说匹配尽量少的内容,一旦匹配上就不再考虑后面的字符串)。并且?表示匹配其前面的内容0次或者1次,这样就包括了正数和负数都可以。注意这里的
-号后面不能接*或者+,必须只能至多有一个。 - 随后
\d+表示1位或者多位数字,代表该浮点数的整数部分。 \.转义表示小数点。\d+表示1位或者多位数字,代表该浮点数的小数部分。
验证输入是否为正浮点数
表达式
1 | var reg = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/; |
解释
- 开始一位1-9的数字
[1-9],再随后是任意多位0-9的数字\d*,表示正浮点数整数部分(且是大于等于1的浮点数)。 \.转义表示小数点。\d*表示0位或者多位数字,代表该浮点数的小数部分。- 再考虑0-1之间的浮点数,
\d*[1-9]\d*的写法是为了防止0.000这种情况。
验证输入是否为负浮点数
表达式
1 | var reg = /^\-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/; |
解释
- 开头匹配负号’-‘
- 考虑小于等于-1的浮点数,一位1-9的数字
[1-9],再随后是任意多位0-9的数字\d*,表示负浮点数整数部分。 \.转义表示小数点。\d*表示0位或者多位数字,代表该浮点数的小数部分。- 再考虑-1~0之间的浮点数,
0直接匹配0。 \.转义表示小数点。\d*[1-9]\d*的写法是为了防止0.000这种情况。
验证输入是否为非负浮点数
表达式
1 | var reg = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/; |
解释
- 前半部分
[1-9]\d*\.\d*|0\.\d*[1-9]\d*与正浮点数一样,不再赘述。 0?表示0个或1个‘0’,这是允许的,针对的是“.666”这种写法的浮点数。- 最后一部分直接匹配“0”,也是可以的。
验证输入是否为非正浮点数
表达式
1 | var reg = /^(\-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$/; |
解释
- 前半部分
\-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)与负浮点数一样,不再赘述。 0?表示0个或1个‘0’,这是允许的,针对的是“.666”这种写法的浮点数。- 最后一部分直接匹配“0”,也是可以的。
验证输入是否为有两位小数的正实数
表达式
1 | var reg = /^([1-9]\d*(\.[0-9]{2})?)|(0\.[1-9][0-9])|(0\.[0-9][1-9])$/; |
解释
- ([1-9]\d*(.[0-9]{2})?)匹配大于等于1的两位小数实数
- (0.[1-9][0-9])匹配0.10~0.99的两位小数实数
- (0.[0-9][1-9])匹配0.01~0.99(但不含0.10 0.20 0.30 … 0.90这些数)
- 2,3中的处理是为了排除0.00这个数(非正)