首页 > 解决方案 > 正则表达式只允许数字、带点的数字、& 和空格

问题描述

我需要一个正则表达式,它只允许数字、空格、精度为 2 的十进制数字和 & 符号。

此正则表达式将用于检查允许多个数字用 & 符号分隔的输入,并且中间可以有空格(可选,但最多一个)。以下是我尝试过的,由于我对正则表达式的理解很差,他们的工作很糟糕。

^(?=.*[0-9])[ &.0-9]+$

但效果不好。

因为像 &&&&&&1 这样的东西会通过检查。

也试过这样的东西,效果也很差

^([0-9]{1,}[.]{0,1}[0-9]{0,2}[ ]{0,1}+[&]{0,1}[ ]{0,1})*?$

以下举例说明了我的预期

12 --->(通过)

12.12 --->(通过)

12 & 129.12 & 11 --- >(通过)

12 & 129. & 11 ---> (不应该通过)

12 & .129 --->(不应通过)

12 & 129..1(不应通过)

12 & 129.111(不应通过)

&&&1(不应该通过)

…………

提前谢谢了

标签: regex

解决方案


为了考虑空间,您可以使用它们使它们成为可选的?

您可以使用匹配 2 个可选空格和 & 符号的重复模式:

^\d+(?:\.\d{2})?(?: ?& ?\d+(?:\.\d{2})?)*$

解释

  • ^字符串的开始
  • \d+(?:\.\d{2})?匹配 1 个以上的数字,并且可以选择匹配一个点和 2 个数字
  • (?:非捕获组
    • [ ]?&[ ]?匹配一个可选空格(用于[ ]清楚起见)&和可选空格
    • d+(?:\.\d{2})?匹配 1 个以上的数字,并且可以选择匹配一个点和 2 个数字
  • )*关闭非捕获组并重复 0+ 次以也允许单个条目
  • $字符串结束

正则表达式演示


推荐阅读