PHP Regex用于验证某些数字格式

时间:2019-12-19 06:03:00

标签: php regex

我需要一个正则表达式来验证以下任何一种格式:

  • +10%
  • -123
  • +5.5
  • +50
  • 99
  • 99.99
  • -20%
  • 25%(不应对此进行验证)

(没有任何%+的{​​-不应被验证)

我尝试使用preg_match('/^[+-]?(\d+\.)?(\d+)[%]?$/', $value),但这也可以验证25%
任何人都可以共享可验证上述格式的正则表达式吗?

2 个答案:

答案 0 :(得分:2)

我可能会在这里保持简单并使用替换:

^(?:[+-]?\d+(?:\.\d+)?|[+-]\d+(?:\.\d+)?%)$

Demo

您的要求中最棘手的部分是,对于非百分比数字,前导符号是可选的,但对于百分比而言则是必需的。这种交替使得很容易将这两个问题分开。

答案 1 :(得分:2)

您可以使用conditional sub-pattern in PCRE来执行此操作,这样可以避免交替重复重复整数匹配模式:

^([+-])?\d+(?:\.\d+)?(?(1)%)?$

RegEx Demo

RegEx详细信息:

  • ^:开始
  • ([+-])?:匹配可选组#1中的+-
  • \d+:匹配1个以上的数字
  • (?:\.\d+)?:在可选的非捕获组中匹配点后跟1+数字
  • (?(1)%)?:条件子模式。如果存在#1组,则将%匹配为可选匹配。
  • $:结束