在 php 中,我需要验证文本区域输入中的任意数量的正数和/或负数。数字可以是 float ,并用逗号分隔。
有效:
",,,66,,78.8,-89.8,,0.0,,3.14," or "," or "67,89,10,0876,,"
在 regex101.com 的帮助下,我创建了这个正则表达式
^((-?\d+(\.\d+)?)|(,+))*$
在 php 中我有这段代码
if (preg_match("/^((-?\d+(\.\d+)?)|(,+))*$/", $text))
{
echo "yes";
} else
{
echo "no";
}
我的问题是,这个正则表达式还验证“-”和额外的“。”数字之间。
这应该是无效的:
",,67.8,89.8787,78-89,-8,07,,33.33.33,,,"
有人可以帮助如何改进此代码吗?
最佳答案
您可以使用
/^,*(-?\d*\.?\d+)?(?:,+\g<1>)*,*$/
请参阅regex demo .
详细信息
-
^
- 字符串开始 -
,*
- 0+逗号 -
(-?\d*\.?\d+)?
- 可选的捕获组1匹配 float (注意:如果您不想像 float 一样匹配\d+(?:\d+)?
,您可以保留原来的.8
) -
(?:,+\g<1>)*
- 0+次重复-
,+
- 1 个以上逗号 -
\g<1>
- 捕获组 1 模式(这是一个 subroutine call,等于(?1)
,用于重复第一个捕获组子模式)
-
-
,*
- 0+逗号 -
$
- 字符串结尾。
关于php - 正则表达式 - 排除数字之间的 "-",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50391383/