javascript 常用正则表达式收集

常用正则表达式收集

正则是程序员又爱又恨的一部分了,会用的可以大大提高检验效率,不会用的写一个正则都脑袋疼,所以慢慢积累一些正则方便使用。在写正则之前,一定要先分析清规则,才能写好正则,请大家细细品这句话。

测试用例代码格式

每次只需要修改测试的字符串和正则表达式即可测试


      // 测试用例
      var strArr = ['1234@qq.com', 'wang@126.com', 'wang123@126.com', 'wang123@vip.163.com', 'wang_email@outlook.com', 'wang__email@outlook.com', 'wang_email_@outlook.com', 'wangemail_@outlook.com','wang_emai.l@outlook.com','wang.email@gmail.com'];
      // 正则表达式
      var reg = /^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@([A-Za-z0-9-]+.)+[A-Za-z]{2,6}$/;
      
      // 无效的字符串
      var aResError = [];
      // 遍历校验字符串
      var aRes = strArr.map(function (item) {
        if (!reg.test(item)) {
          var str = item + ' 正则无效';
          aResError.push(str);
          return str;
        }
        return item + ' 正则有效';
      });

      // 全部测试用例结果
      console.log('全部测试用例结果: ' , aRes);

      // 测试无效用例结果
      console.log('测试无效用例结果: ' , aResError);

邮箱正则

邮箱正则:/^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@([A-Za-z0-9-]+.)+[A-Za-z]{2,6}$/

首来看几个合法邮箱的例子:

  • 1234@qq.com(纯数字)
  • wang@126.com(纯字母)
  • wang123@126.com(数字、字母混合)
  • wang123@vip.163.com(多级域名)
  • wang_email@outlook.com(含下划线 _
  • wang.email@gmail.com(含英语句号 .

根据对以上邮箱的观察,可将邮箱分为两部分(“@”左边和右边部分)来进行分析:

  • 左边部分可以有数字、字母、下划线(_)和英语句号(.),左侧不能出现连续的_.,且不能在结尾,因此可以表示成:[A-Za-z0-9]+([_.][A-Za-z0-9]+)*
  • 右边部分是域名,按照域名的规则,可以有数字、字母、短横线(-)和英语句号(.),另外顶级域名一般为 2 ~ 6 个英文字母(比如“cn”、“com”、“site”、“group”、“online”),故可表示为:([A-Za-z0-9-]+.)+[A-Za-z]{2,6}。

要注意两点:

  • 考虑到匹配邮箱时字符串的一头一尾不能有其它字符,故要加上开始标志元字符 ^ 和结束标志元字符 $
  • 英语句号(.)是正则表达式的元字符,因此要进行转义(.)。

手机号正则

手机号正则:/^1[3456789]d{9}$/

手机号由于运营商繁多,基本上都是1开头的11位数字,忽略掉各运营商的细节可以写个大概的正则,如果你要针对各个运营商和各个号段写正则就需要具体的规则了。

身份证号正则

身份证号正则:/^d{15}$)|(^d{17}([0-9]|X)$/

身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X

身份证正则合并:

/^d{15}$)|(^d{17}([0-9]|X)$/

数字正则

  • 数字:^[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]+

特殊需求表达式

  • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]w{5,17}$
  • 日期格式:^d{4}-d{1,2}-d{1,2}
  • 空白行的正则表达式: s* (可以用来删除空白行)
  • HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^s*|s*$或(^s*)|(s*$ ) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

参考:
书写一个用于验证邮箱的正则表达式

原文地址:https://www.cnblogs.com/jiaoshou/p/14298780.html