常见数据格式的正则表达式验证 | GCidea's blog

JerryXia 发表于 , 阅读 (23)
目录

前言

  正则表达式是一种强大的工具,可以在很多场景下对我们需要的内容进行快速匹配过滤。比如,在前端提交表单时,就可以通过编写合理的正则表达式对用户输入进行首次过滤(当然服务端程序在接收到数据后一样要进行严格的数据检查,保证程序正常运行,防止通过postman等工具绕过前端验证进行恶意攻击。)

正则表达式的学习

  网上有很多系统学习正则表达式的资源,掌握基本的语法和相关机制是实现常见数据格式验证的基础。快速了解正则表达式的内容,推荐廖雪峰JavaScript教程中的正则RegExp部分
  需要单独说明的是,以下提到的各种数据格式的验证,都采用JavaScript中的如下写法:

1
2
3
4
var reg = /正则表达式/;
var strToTest = "待测试内容";
reg.test(strToTest); //返回true或者false表明正则验证通过或失败
strToTest.match(reg); //以数组形式返回匹配正确的部分,若没有返回null

验证输入是否为空

表达式

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*$/;

解释

  1. 这个表达式可以用来匹配除0以外的任意正负整数。
  2. 开始是一个负号“-”,用来匹配负数的负号,?表示非贪婪匹配模式(也就是说匹配尽量少的内容,一旦匹配上就不再考虑后面的字符串)。并且?表示匹配其前面的内容0次或者1次,这样就包括了正数和负数都可以。注意这里的-号后面不能接*或者+,必须只能至多有一个。
  3. [1-9]则表示匹配一个1-9的数字,作为整个这个整数的开头。注意这里必须将第一位这样处理,因为不能为0,无法和后面的\d*合并。
  4. \d*则表示后续接的0个或多个数字,和前面的部分共同构成整数。

验证输入是否为正整数

表达式

1
var reg = /^\+?[1-9]\d*$/;

解释

  1. 开始可以有一个正号(最多一个),当然也可以没有。并且由于+在正则表达式中有特殊含义,因此必须转义。
  2. [1-9]则表示匹配一个1-9的数字,作为整个这个整数的开头。注意这里必须将第一位这样处理,因为不能为0,无法和后面的\d*合并。
  3. \d*则表示后续接的0个或多个数字,和前面的部分共同构成整数。

验证输入是否为负整数

表达式

1
var reg = /^\-[1-9]\d*$/;

解释

  1. 一开始必须有一个负号,并且由于-在正则表达式中有特殊含义,因此转义。
  2. [1-9]则表示匹配一个1-9的数字,作为整个这个整数的开头。注意这里必须将第一位这样处理,因为不能为0,无法和后面的\d*合并。
  3. \d*则表示后续接的0个或多个数字,和前面的部分共同构成整数。

验证输入是否为非负整数(正整数 + 0)

表达式

1
var reg = /^((\+?[1-9]\d*)|(0))$/;

解释

  1. 正数前面可能会有正号,\+?限制有0个或者1个正号。
  2. 随后是一位1-9的数字[1-9],再随后是任意多位0-9的数字\d*,排除掉“+02”这样无意义的写法。
  3. 对于0,直接匹配(0)。
  4. 上述情况,居其一,用或|区分,整体上必须还用括号()包起来,否则无法正确过滤”-0”这种情况。

验证输入是否为非正整数(负整数 + 0)

表达式

1
var reg = /^((\-[1-9]\d*)|(0))$/;

解释

  1. 对于0,直接匹配(0)。
  2. 对于小于零的负整数,开头是负号-,随后是一位1-9的数字[1-9],再随后是任意多位0-9的数字\d*
  3. 上述两种情况,居其一,用或|区分,整体上必须还用括号()包起来,否则无法正确过滤”-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+)?$/;

解释

  1. 开始是一个负号“-”,用来匹配负数的负号,?表示非贪婪匹配模式(也就是说匹配尽量少的内容,一旦匹配上就不再考虑后面的字符串)。并且?表示匹配其前面的内容0次或者1次,这样就包括了正数和负数都可以。注意这里的-号后面不能接*或者+,必须只能至多有一个。
  2. 随后\d+表示1位或者多位数字,代表该浮点数的整数部分。
  3. \.转义表示小数点。
  4. \d+表示1位或者多位数字,代表该浮点数的小数部分。

验证输入是否为正浮点数

表达式

1
var reg = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/;

解释

  1. 开始一位1-9的数字[1-9],再随后是任意多位0-9的数字\d*,表示正浮点数整数部分(且是大于等于1的浮点数)。
  2. \.转义表示小数点。
  3. \d*表示0位或者多位数字,代表该浮点数的小数部分。
  4. 再考虑0-1之间的浮点数,\d*[1-9]\d*的写法是为了防止0.000这种情况。

验证输入是否为负浮点数

表达式

1
var reg = /^\-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/;

解释

  1. 开头匹配负号’-‘
  2. 考虑小于等于-1的浮点数,一位1-9的数字[1-9],再随后是任意多位0-9的数字\d*,表示负浮点数整数部分。
  3. \.转义表示小数点。
  4. \d*表示0位或者多位数字,代表该浮点数的小数部分。
  5. 再考虑-1~0之间的浮点数,0直接匹配0。
  6. \.转义表示小数点。
  7. \d*[1-9]\d*的写法是为了防止0.000这种情况。

验证输入是否为非负浮点数

表达式

1
var reg = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/;

解释

  1. 前半部分[1-9]\d*\.\d*|0\.\d*[1-9]\d*与正浮点数一样,不再赘述。
  2. 0?表示0个或1个‘0’,这是允许的,针对的是“.666”这种写法的浮点数。
  3. 最后一部分直接匹配“0”,也是可以的。

验证输入是否为非正浮点数

表达式

1
var reg = /^(\-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$/;

解释

  1. 前半部分\-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)与负浮点数一样,不再赘述。
  2. 0?表示0个或1个‘0’,这是允许的,针对的是“.666”这种写法的浮点数。
  3. 最后一部分直接匹配“0”,也是可以的。

验证输入是否为有两位小数的正实数

表达式

1
var reg = /^([1-9]\d*(\.[0-9]{2})?)|(0\.[1-9][0-9])|(0\.[0-9][1-9])$/;

解释

  1. ([1-9]\d*(.[0-9]{2})?)匹配大于等于1的两位小数实数
  2. (0.[1-9][0-9])匹配0.10~0.99的两位小数实数
  3. (0.[0-9][1-9])匹配0.01~0.99(但不含0.10 0.20 0.30 … 0.90这些数)
  4. 2,3中的处理是为了排除0.00这个数(非正)

验证输入是否为有1~3位小数的正数或负数

表达式