浅析正则表达式+范围规则校验表达式+js从字符串中截取数字

news2024/9/26 5:22:08

平时项目中经常需要用到正则表达式,可惜之前太懒(当然最主要是太菜也不会写)都是直接网上搜。之前用的也简单,无非是校验手机号码格式、校验邮箱格式、偶尔有校验密码这种,网上一搜一大堆,根本不用自己写,结果前段时间有个需求稍微有点点复杂,网上也搜不到现成的,不得不尝试自己动手丰衣足食。。。

不过我还是只会简单的,复杂的什么断言、组之类的还在艰难学习中,也希望有大佬不吝赐教。

这个需求是:管理员在某个工单定义一个范围,比如成绩是0-100之间,或者调查问卷的年龄范围,然后工单流转后其他用户输入的数字收到管理员定义个范围影响,所以要求用正则校验管理员输入的范围规则是否合法,然后根据输入的范围,去校验普通用户输入的数值是否合法。

  1. 首先是最核心的规则校验表达式,我们的规则是: (或者[开头+数字+英文逗号+数字+)或]结尾,就是这种:
    (1,100) 或者 (1,100],就是初中数学的那种范围区间。我用的正则表达式是:
let reg = /^(\(|\[)-?[0-9]*,-?[0-9]*(\)|\])$/;
//   其中 ^是匹配开头
//  (|\[)是以(或者[开头,在 (和[之前加上\是转义字符,避免表达式把 (和[当成括号的开头来匹配,而是把它们当做字符串 (和[
//  -?是有一个或者0个-,因为可能是负数也可能是正数
// [0-9]*就是重复的数字
// ,就是中间隔开的逗号;
// -?[0-9]* 跟逗号前面的一样,是一个数字校验
// (\)|\]) 是以或]结尾
//  $是匹配结尾

上面这个正则表达式有个缺陷就是:两个数字的大小没有作比较,也就是用户输入的第二个数字可能比第一个数字小,这个我现在实在是无能为力[手动哭笑不得]

心得:刚开始觉得无从下手是因为不知道开头和结尾匹配到哪里,现在其实也没太明白,感觉就是^从开始匹配到结束,$从结尾匹配到开头。。。目前这个不影响,要紧的是中间的规则

  1. 拿到字符串的规则之后,从字符串中截取出最大值和最小值(这里没有考虑()和[]的区别,因为()的区间是不包含开头和结尾,[]的区间是包含开头和结尾),我用的方法是:
// 从范围的字符串中获取数字
  const pickNumbersFromString = (v) => {
    if (typeof v === 'string') {
      const regEx = /[^\d|^.|^-]/g;
      const t = v.replace(regEx, ',').split(',');
      const r = [];
      t.forEach((item) => {
        if (item || item === 0) {
          r.push(Number(item));
        }
      });
      return r;
    }
    return [];
  };
  // 这里会返回一个数组,数组中就是范围中的两个数字
  let a = '(2,200)';
console.log(pickNumbersFromString(a));  //  [2, 200]
  1. 根据需要在数字输入框中限定输入的最大值和最小值

下面是我最近学到的正则里的一点小知识:

 // 正则中常见的限定符:
  a* // 字符a出现0次或多次
  a+ // 字符a出现1次或多次
  a? // 字符a出现0次或1次
  a{3} // 字符a出现3次
  a{3,7} // 字符a出现3-7次
  a{3,} // 字符a出现3次以上
  // 或运算符,这个用的还挺多的

图片来源网络,侵删
(图片来源网络,侵删)

学习路上最大的敌人是恐惧,如果感兴趣可以去搜一些正则表达式的视频学习,还是很有帮助的。希望本文对您有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ONE·C || 函数与数组】

总言 C语言:函数、数组初步认识。 文章目录总言1、函数1.1、是什么1.1.1、基本介绍1.1.2、库函数使用演示(strcpy、memset)1.1.3、自定义函数使用演示1.2、函数参数、传值调用和传址调用1.3、相关练习1.3.1、写一个函数:可以判断一个数是不是素数1.3.2、…

集成学习-理论概述

1、集成学习概述集成学习(ensemble learning)本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习的特点:集成方法是一种将几种机器学习技术组合成一个预测模型的元算法,以减小方差(baggin…

python-文件和异常

1. 从文件中读取数据1.1. 读取整个文件在同目录下创建textA文本文件123 456 789a. open函数:要以任何方式去使用文件,都需要先打开文件,它接受一个参数——要打开文件的名称。 open()返回一个表示文件的对象。b. 关键字with在不再需要访问文件…

可以自动生成日报的清单工具

用过了很多todolist工具(Microsoft_ _To D、oodoist、滴答清单、印象笔记、有道笔记、) 最终稳定一直在用的就这一个“闪点清单” 我的核心诉求就两点 1. 可以实时记录任务,并标记是否完成 2. 可以按天、周导出,自动整合成日报…

《计算机构造与解释》读书笔记(4)

文章目录1. 写在最前面2. 并发:时间是一个本质问题2.1 并发系统中时间的性质2.1.1 并发程序的正确行为2.2 控制并发的机制2.2.1 对共享变量的串行访问2.2.2 Schema 里的串行化2.2.3 使用多重共享资源的复杂性2.2.4 串行化实现2.2.5 死锁2.2.6 并发性、时间和通信3. …

Linux学习记录——구 进程概念的基础理解

文章目录一、操作系统概念理解二、进程的基本理解1、什么是进程?2、进程的属性1、指令查看进程2、目录查看进程3、进程与进程之间1、父子进程概念2、创建子进程---fork的基础使用方法3、fork原理的初级理解1、fork的操作2、fork如何看待代码和数据3、fork如何看待两…

【Docker概念和实践 2】虚拟机 ubuntu18上安装docker

一、说明 已经安装了N遍Docker了,逐步成了一套习惯,这里专门记录之;总之,安装前必须回答得问题是:何种操作系统、何种版本、是否虚拟机、云数据源等问题。一个环境如果装得好,就不需要重装,如果…

C语言刷题之摩尔投票法

目录 1.引入 2.摩尔投票算法 3.基本步骤 摩尔投票法分为两个阶段: 1.抵消阶段 2.检验阶段 4.代码实现 5.扩展沿伸 6.总结 1.引入 我们来看一个问题: 假设有一个无序数组长度为n,要求找出其中出现次数超过n/2的数,要求时间复…

vue3-环境搭建(docker版本)

序 大大小小项目经历无数,之前都是写的vue2的项目,因为项目需要,边学边用vue3,也算能转的开,但心里一直想系统的理顺一下vue3。 看了看极客时间,掘金小课,都没有能达到心里预期的“系统学习”…

免费内网穿透软件一步设置实现外网访问

在工作和生活中,有很多类似内网搭建服务器和外网连接内网的需求, 例如在任何地方都能访问自己家里的主机电脑笔记本上的应用,让出差外网和任何地方都能访问到公司内部局域网的服务器……这些需求我们可以统一用一个方案解决,那就是…

网络编程UDP+TCP

日升时奋斗,日落时自省 目录 1、网络编程基本概念 2、UDP数据报套接字编程 2.1、UDP相关API 2.1.1、DatagramSocket API 2.1.2、DatagramPacket API 2.2、UDP版本服务器 2.3、UDP版本客户端 2.4、UDP连接操作 2.5、翻译业务 2.6、总结 3、TCP流套接字编程 …

【项目实战】一文入门项目中Lombok的常用注解

一、Lombok介绍 1.1 Lombok是什么? 一个Java库,用于简化Java代码。 Lombok是一个非常神奇的 java 类库,会利用注解自动生成 java Bean 中烦人的 Getter、Setting,还能自动生成 logger、ToString、HashCode、Builder 等 java特色…

【GD32F427开发板试用】开发一款网络音乐播放器

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:守勤 资源介绍 非常荣幸能够参与到这次GD32F427开发板试用的活动中来,开发板的设计非常简洁,板载了一颗GD32F103C8T6和…

Python中的递归及案例演示

目录 一.什么是递归 二.案例 递归找文件 步骤 os模块中的三个方法 演示 最终代码 三.总结 一.什么是递归 递归在编程中是一种非常重要的算法 递归:即方法(函数)自己调用自己的一种特殊编程写法 如: 函数调用自己,即称之为递归调用。 二.案例 递…

C++ 引用! 他是坤坤也是鸡哥

👑专栏内容:C学习笔记⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 目录一、前言二、引用1、引用的概念2、引用的声明3、引用的特性Ⅰ、 引用在定义时必须初始化Ⅱ、 一个变量可以有多个引用Ⅲ、引…

深度学习PyTorch 之 DNN-多分类

前面讲了深度学习&PyTorch 之 DNN-二分类,本节讲一下DNN多分类相关的内容,这里分三步进行演示 结构化数据 我们还是以iris数据集为例,因为这个与前面的流程完全一样,只有在模型定义时有些区别 损失函数不一样 二分类时用的损…

Pollard Rho算法

生日悖论 假设一年有nnn天,房间中有kkk人,每个人的生日在这nnn天中,服从均匀分布,两个人的生日相互独立 问至少要有多少人,才能使其中两个人生日相同的概率达到ppp 解:考虑k≤nk\le nk≤n 设kkk个人生日互…

Spring框架介绍及使用

文章目录1.概述1.1 Spring是什么1.2 Spring 的优势1.3 spring 的体系结构2. IoC 的概念和作用2.1 什么是程序的耦合2.2 IoC容器3. AOP的概念和作用超链接: Spring重点内容学习资料1.概述 1.1 Spring是什么 Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源…

使用docker-compose搭建Prometheus+Grafana监控系统

一、角色分配 Prometheus 采集数据Grafana 用于图表展示redis_exporter 用于收集redis的metricsnode-exporter 用于收集操作系统和硬件信息的metricscadvisor 用于收集docker的相关metrics 二、安装Docker 可以参考:https://ximeneschen.blog.csdn.net/article/d…

JVM调优实战:to-space exhausted Evacuation Failure

一次线上dubbo问题的定位,进行JVM调优实战。问题线上dubbo接口provider抛出异常:org.apache.dubbo.rpc.RpcException: Failfast invoke providers ... RandomLoadBalance select from all providers ... use dubbo version 2.7.16, but no luck to perfo…