如何使用正则表达式对输入数字进行匹配详解

 更新时间:2022年10月09日 10:50:33   作者:sanjin0126  
正则表达式用于字符串处理、表单验证等场合,实用高效,下面这篇文章主要给大家介绍了关于如何使用正则表达式对输入数字进行匹配的相关资料,文中介绍的非常详细,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言:

最近有一个区间范围限制,一般255数字以下的都能在网上薅到,但是需要弄一个int16、int32、int64范围的输入限制......在网上逛了很久都没找到,基本都是从0开始教学那种,我又不想看,觉得写的范围太大了,我就单纯的对数字进行校验,最终还是研究了一点点,先说说自己的理解,0如有觉得不对的地方或者还有更简单的方法,请大佬踢我一jio

正文:

下面会使用到一些元字符,边做边解释。

举例:做一个int8的输入限制,也是就是需要将输入框的限制设置在(-128 ~ 127)

先说0~127的限制范围:

首先需要先写 ^ $ 两个元字符,这两个的意思就是开始与结束的字符串搭配。如匹配 0~5的整数字符串,则就是 ^ [0-5]$ (中括号为字符范围,匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符)。

那如果是 0~15呢,15就是两个字符,需要从右边往左拆分,当第一位数字为1时,第二位数值的取值范围就只能是0~5,所以出现了第一种组合方式 1[0-5],当第一位为0时,也就是不显示十位,只存在个位数,那么第二种组合方式就是[0-9],结合第一种和第二种的组合方式,^(1[0-5]|[0-9])$ 中间的|符号可以理解为或运输,就是既可以匹配1[0-5]的数字,也可以匹配[0-9]的数字,圆括号可以理解为一个组合。此处使用Qt测试代码为:

因为元字符中:

\d

匹配一个数字字符。等价于 [0-9]。

所以此处的 "^(1[0-5]|[0-9])$" 组合方式可以缩写成 "^(1[0-5]|\d)$",因为在Qt中使用\d好像被识别成转义字符了,提示如下面一样:

所以需要将 \d 写成 \\d ,即为  "^(1[0-5]|\\d)$"

 那么,至此 0~15 整数的正则表达式就写完了,如果我们这里需要写  -15~15 的取值范围又该怎么弄呢? 一样的只需要将 0~15照着抄过来就行。先写成"^((-1[0-5]|\\d)|(1[0-5]|\\d))$",大家会发现我写了两次0~15的取值范围,中间用到了“|”或运算符,在最左侧加了一个“-”负号,给人的感觉好像是-15~15,但是这里左侧的取值范围存在0的情况,也就是左边的会出现 -0 的匹配,是因为左边的 \\d包含了 0~9的数字,这里面包含了0,所以我们不想要这种情况的出现,只需要将左边的 \\d改为 [1-9]就可以啦,所以-15~15 的匹配方式为 "^((-1[0-5]|[1-9])|(1[0-5]|\\d))$"

当然这只是我的简单理解,可能会存在更好的方式,避免左右两侧重复的匹配字符串太多,而又做不到复用的情况,也请大佬指出。

最后我们要来匹配一个 int16的取值范围,因为int16的范围为整数 -32768 ~ 32767,所以我们一开始还是先写右边 0~32767的范围,因为写出了右边后(32767),再将左边( -32768)加个符号,对左边的个位数情况(-0)做出处理,就可以啦。

首先0~32767 当前面为3276时,个位数只能匹配 0~7 : 3276[0-7]

0~32767 当前面为327时,后两位只能匹配 小于60的数字,也就是0~59,即个位数匹配 0~9,十位数匹配 0~5 : 327[0-5][0-9]  或则 327[0-5]\\d

0~32767 当前面为32时,后三位只能匹配 小于700的数字,也就是0~699,即个位数匹配 0~9,十位数匹配 0~9,百位数匹配 0~6 : 32[0-6][0-9][0-9]  或则 32[0-6]\\d\\d  也可以简写成 32[0-6]\\d{2}  花括号为前面一个字符重复的次数,这里也就是\\d必须要重复2次。下面是花括号的使用讲解。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,}

n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

0~32767 当前面为3时,后四位只能匹配 小于2000的数字,也就是0~1999,即个位数匹配 0~9,十位数匹配 0~9,百位数匹配 0~9,千位数匹配0~1 : 3[0-1][0-9][0-9][0-9]  或则 3[0-1]\\d\\d\\d  也可以简写成 3[0-1]\\d{3}。

0~32767 当存在5位数字,也就是输入数字为万位的时候,那么现在万位只能存在1~2(因为3已经在前面匹配过来,这里不需要继续匹配3的情况了),后四位就可以全匹配0~9,因为只要存在5个数,且万位数字又是1~2的范围内,所以个位、十位、百位、千位再大也不可能会超过30000的 ,即个位数匹配 0~9,十位数匹配 0~9,百位数匹配 0~9,千位数匹配0~9 : [1-2][0-9][0-9][0-9][0-9]  或则 [1-2]\\d\\d\\d\\d  也可以简写成 [1-2]\\d{4}。

0~32767 当存在4位数字,也就是输入数字为千位的时候,那么现在千位就能存在1~9,后面的百位、十位、个位的取值情况可以为0~9,即千位存在[1-9]\\d\\d\\d,百位存在[1-9]\\d\\d,十位位存在[1-9]\\d,(这里个位为一个数字的情况,留到最后处理)这么组合下来就是 [1-9]\\d\\d\\d|[1-9]\\d\\d|[1-9]\\d,这样匹配没有问题,但是展示不太好,所以这里用到花括号简写为:  [1-9]\\d{1,3}  花括号1~3的意思就是匹配\\d至少一次,最多3次。

0~32767 当只存在1位数字,也就是只输出个位的时候,即\\d或者[0-9]。

所以结合上面的匹配结果  0~32767的匹配公式为

"^(3276[0-7]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{1,3}|\\d)$"

那么同理-32768 ~ -1,因为不存在-0的情况,而前面0~32767已经匹配了0,所以此处只匹配到-1。即:

"^-(3276[0-8]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{0,3})$"

那么-32768 ~ 32767的匹配公式,也就是int16的匹配公式为

"^(-(3276[0-8]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{0,3})|(3276[0-7]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{1,3}|\\d))$"

同理,int32(-2147483648 ~ 2147483647)、int64(-9223372036854775808 ~ 9223372036854775807)也可以按照这样的方式匹配,当然这只是我简单看了一下后的理解,可能存在还有更简单的方法,欢迎各位大佬赐教。

总结

到此这篇关于如何使用正则表达式对输入数字进行匹配的文章就介绍到这了,更多相关正则表达式对输入数字匹配内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 史上最全正则表达式合集(马上收藏)

    史上最全正则表达式合集(马上收藏)

    这篇文章主要介绍了史上最全正则表达式合集(马上收藏),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • js正则匹配table tr

    js正则匹配table tr

    这篇文章主要介绍了js正则匹配table tr,需要的朋友可以参考下
    2007-06-06
  • javascript 基于正则表达式的文本框验证代码

    javascript 基于正则表达式的文本框验证代码

    js验证文本框内容,以前jb51.net提供过不少是基于js函数版本的,这里提供一些正则表达式版本,大家学习归学习,最好是基于函数的绑定操作。代码分离技术。
    2009-12-12
  • 正则表达式(简单易懂篇)

    正则表达式(简单易懂篇)

    正则表达式是一种可以用于模式匹配和替换的强大工具。这篇文章主要介绍了正则表达式(简单易懂篇),需要的朋友参考下
    2017-01-01
  • 浅析golang 正则表达式

    浅析golang 正则表达式

    Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。这篇文章给大家介绍golang 正则表达式的相关知识,感兴趣的朋友跟随小编一起看看吧
    2020-10-10
  • 一个非常不错的一个正则练习JS版

    一个非常不错的一个正则练习JS版

    一个非常不错的一个正则练习JS版...
    2007-06-06
  • 利用正则快速找出两个字符串的不同字符

    利用正则快速找出两个字符串的不同字符

    利用正则快速找出两个字符串的不同字符...
    2007-03-03
  • 如何用javascript正则表达式验证身份证号码是否合法

    如何用javascript正则表达式验证身份证号码是否合法

    在用户注册页面有些需求要求的比较严格,需要对身份证验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。此篇文章主要是讲解如何用javascript正则表达式验证身份证号码是否合法,需要的朋友可以参考下
    2015-07-07
  • 超强变态的正则(\w)((?=\1\1\1)(\1))+讲解

    超强变态的正则(\w)((?=\1\1\1)(\1))+讲解

    这篇文章主要介绍了超强变态的正则(\w)((?=\1\1\1)(\1))+等好几个比较强大到变态的规则,这里跟着程序员之家小编一起学习吧
    2020-02-02
  • 55分钟学会正则表达式

    55分钟学会正则表达式

    正则表达式是一种用来描述一定数量文本的模式,用来匹配相同规范样式的文本。在JavaScript中用RegExp对象表示正则表达式( 即Regular Eexpression),它是对字符串执行模式匹配的强大工
    2016-03-03

最新评论

?


http://www.vxiaotou.com