1. 正则匹配数字范围

正则表达式是为了匹配字符而设计的,而并不是为了匹配数字,所以当你使用正则匹配指定范围内的数字的时候你需要额外小心。表达式 [0-255] 并不能匹配0至255之间的数字。表达式 [0-255] 是一个 字符集 ,它的含义是匹配 0,1,2,5中任意一个字符,这个表达式等同于 [0125]

正则引擎真正处理的是字符,所以数字0对于引擎来说是一个字符,而255对于引擎来说是长度为3的字符。所以如何要匹配0至255中的所有数字,我们需要让引擎匹配长度为一到三之间的字符。

表达式 [0-9] 可以匹配0 9之间的数字。`[1-9][0-9]`可以匹配10 99之间的数字。这两个是最简单的。

匹配三位整数略微复杂一点,因为我们要排除256至999之间的整数。 1[0-9][0-9] 可以匹配100至199。 2[0-4][0-9] 匹配200至249。最后 25[0-5] 匹配250至255。

你可以发现当我们匹配0到255之间的整数时,我们需要按照字符的长度来分割这个范围。在匹配三位整数的时候,如果百位是 1 ,那么十位和个位允许出现 0 至 9 之间的10个字符,如果百位是 2 ,那么十位和个位的字符将进一步做限制。

把前面三个部分用 选择符 连接起来,我们就得到了0只255之间所有的整数: [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5] 。这个方法还存在一个缺陷:正则表达式通常允许部分匹配,所以这个表达式可以匹配到 12345 中的 123。有两个方法可以解决这个问题。

2. 搜索指定长度的字符

如果你在一个文档中所搜数字,你可以使用 词语边界 锁定数字的范围: \b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b 。因为选择符的优先级是最低的,所以我们要在选择外加上括号。这样引擎会先匹配第一个边界符 \b ,然后匹配整个选择符,最后匹配最后一个 \b

3. 验证指定长度的字符

如果你想验证用户输入内容,那么或许你想验证的是用户输入的完整内容,而不是其中的部分。你可以使用 位置字符 ^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$

以下一些常用的数字匹配。

  • 000…255: ^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
  • 0 or 000…255: ^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
  • 0 or 000…127: ^(0?[0-9]?[0-9]|1[01][0-9]|12[0-7])$
  • 0…999: ^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$
  • 000…999: ^[0-9]{3}$
  • 0 or 000…999: ^[0-9]{1,3}$
  • 1…999: ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$
  • 001…999: ^(00[1-9]|0[1-9][0-9]|[1-9][0-9][0-9])$
  • 1 or 001…999: ^(0{0,2}[1-9]|0?[1-9][0-9]|[1-9][0-9][0-9])$
  • 0 or 00…59: ^[0-5]?[0-9]$
  • 0 or 000…366: ^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])$
1. 正则匹配数字范围正则表达式是为了匹配字符而设计的,而并不是为了匹配数字,所以当你使用正则匹配指定范围内的数字的时候你需要额外小心。表达式[0-255]并不能匹配0至255之间的数字。表达式[0-255]是一个字符集,它的含义是匹配 0,1,2,5中任意一个字符,这个表达式等同于[0125]。正则引擎真正处理的是字符,所以数字0对于引擎来说是一个字符,而255对于引擎来说是长度为3的字符。... ^201607(1[6-9]|2[0-9]|3[0-1]).+ 逻辑很简单,如果是必须是1或2或3开头,如果是1开头则后面 范围 为6-9,如果是2开头则为0-9,如果为3开头则为0-1,因为7月份到31号 同理,如果要 匹配 前半月的数据则是: ^B201607(0[0-9]|1[1-5]).+ php 正则 表达式限制 数字 个数 如何写个 正则 表达式,只有4个 数字 才能 匹配 比如1234可以 匹配 ,12345或者12 数字 个数不是4个的不能 匹配 ? \d{4}我试过不可以, public boolean isNumber(String str) java.util.regex.Pattern pattern=java.util.regex.Pattern.compile("[0-9]+(.[0-9]+)?"); java.util.regex.Matcher match=pattern.matcher(str); if(match.matches()==false) return false; return true; ------------------------------------------------------------------------------------------------------ [removed] function validate(){ var reg = new RegExp("^[0-9]*$"); var obj = document.getElementById("name"); if(!reg.test(obj.value)){ alert("请输入 数字 !"); if(!/^[0-9]*$/.test(obj.value)){ alert("请输入 数字 !"); [removed] ------------------------------------------------------------------------------------------------------ 验证 数字 正则 表达式集 验证 数字 :^[0-9]*$ 验证n位的 数字 :^\d{n}$ 验证至少n位 数字 :^\d{n,}$ 验证m-n位的 数字 :^\d{m,n}$ 验证零和非零开头的 数字 :^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 验证非零的正 整数 :^\+?[1-9][0-9]*$ 验证非零的负 整数 :^\-[1-9][0-9]*$ 验证非负 整数 (正 整数 + 0) ^\d+$ 验证非正 整数 (负 整数 + 0) ^((-\d+)|(0+))$ 验证长度为3的字符:^.{3}$ 验证由26个英文字母组成的字符串:^[A-Za-z]+$ 验证由26个大写英文字母组成的字符串:^[A-Z]+$ 验证由26个小写英文字母组成的字符串:^[a-z]+$ 验证由 数字 和26个英文字母组成的字符串:^[A-Za-z0-9]+$ 验证由 数字 、26个英文字母或者下划线组成的字符串:^\w+$ 验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6- 18 之间,只能包含字符、 数字 和下划线。 验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+ 验证汉字:^[\u4e00-\u9fa5],{0,}$ 验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ 验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。 验证身份证号(15位或 18 数字 ):^\d{15}|\d{} 18 $ 验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12” 验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。 整数 :^-?\d+$ 非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$ 正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 浮点数 ^(-?\d+)(\.\d+)?$ 又是按往常一样刷leetcode,需要了65. 有效 数字 了,一想字符串 匹配 ,就想到了永远的神—— 正则匹配 ,但是在 匹配 过程中需要了很多问题,将代码和问题记录以下。 基础知识:Python 正则 表达式 class Solution: def isNumber(self, s: str) -> bool: integer = re.search(r'^[+-]?[\d]+', s) if integer and integer.gr