正则表达式排除一系列数字

问题描述 投票:0回答:5

我试图排除

200
以下的所有小数。例如:

50.123 invalid
150.103 invalid
205.111 valid

使用

([0-9][0-9])|(1[0-9][0-9])\.*
reg 表达式,我得到以下结果:

50.123 valid but should be invalid
150.103 invalid
205.111 valid

谁能告诉我为什么是十进制数< 100 is valid?

regex
5个回答
8
投票

您可以使用此正则表达式来验证以下所有数字

200

^[01]?[0-9]{1,2}(?:\.[0-9]+)?$

正则表达式演示

正则表达式详细信息:

  • ^
    :开始
  • [01]?
    :匹配
    0
    1
    或不匹配
  • [0-9]{1,2}
    :匹配 1 或 2 位数字
  • (?:\.[0-9]+)?
    :可以选择匹配
    .
    后跟 1+ 数字
  • $
    :结束

5
投票

考虑到您想要排除低于 200 的数字以及显示无效示例的示例数据,我认为您需要:

^(?:[2-9]\d{2,}|1\d{3,})(?:\.\d+)?$

查看在线演示

  • ^
    - 启动字符串锚点。
  • (?:
    - 第一个非捕获组:
    • [2-9]\d{2,}
      - 匹配 2-9 范围内的数字,后跟 2+ 位数字。
    • |
      - 或者:
    • 1\d{3,}
      - 1 后跟 3 个以上数字。
    • )
      - 关闭非捕获组。
  • (?:
    - 打开第二个非捕获组:
    • \.\d+
      - 一个文字点,后跟 1 个以上数字。
    • )?
      - 关闭第二个非捕获组并将其设为可选。
  • $
    - 结束弦锚。

4
投票
/(?<!\d)
(\d{2}|1\d{2})\.\d+/g

\d{2}:2 位数字

(? 避免 205.111 中的 05.111 被匹配

我尝试了你的正则表达式,但它有问题,所以我想出了另一个解决方案。


3
投票

感谢您的回答(一切正常)。

波西米亚人的说法也是正确的:

它以

\.*
结尾,但应该以
\..*
或更准确地说
\.\d*

结尾

所以我将正则表达式编辑为以下内容,现在可以正常工作:

([0-9][0-9]\.\d*)|(1[0-9][0-9]\.\d*)


0
投票

数字范围从 700 到 799 的正则表达式: (70[0-9]|7[1-9][0-9])

要排除 700 到 799 之间的一组数字:

模式 /^(?!(70[0-9]|7[1-9][0-9])$)/

查看这个工具 - 正则表达式数字范围生成器: https://3widgets.com/

本教程介绍数字范围:

https://www.regextutorial.org/regex-for-numbers-and-ranges.php

© www.soinside.com 2019 - 2024. All rights reserved.