我需要一个正则表达式来验证以下任何一种格式:
(没有任何%
或+
的{-
不应被验证)
我尝试使用preg_match('/^[+-]?(\d+\.)?(\d+)[%]?$/', $value)
,但这也可以验证25%
。
任何人都可以共享可验证上述格式的正则表达式吗?
答案 0 :(得分:2)
我可能会在这里保持简单并使用替换:
^(?:[+-]?\d+(?:\.\d+)?|[+-]\d+(?:\.\d+)?%)$
您的要求中最棘手的部分是,对于非百分比数字,前导符号是可选的,但对于百分比而言则是必需的。这种交替使得很容易将这两个问题分开。
答案 1 :(得分:2)
您可以使用conditional sub-pattern in PCRE来执行此操作,这样可以避免交替重复重复整数匹配模式:
^([+-])?\d+(?:\.\d+)?(?(1)%)?$
RegEx详细信息:
^
:开始([+-])?
:匹配可选组#1中的+
或-
\d+
:匹配1个以上的数字(?:\.\d+)?
:在可选的非捕获组中匹配点后跟1+数字(?(1)%)?
:条件子模式。如果存在#1组,则将%
匹配为可选匹配。$
:结束