php - 正则表达式 - 排除数字之间的 "-"

标签 php regex preg-match

在 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/

相关文章:

php - 解析错误: syntax error

php - 如何使用一个查询更新多行

php - Zend Navigation 自定义渲染

c++ - QRegExp 不符合预期

python - Markdown强调-重新代入

php - 从 php 中的数据中删除损坏的 html 标签

php - MyISAM 引擎表关系 (MySQL)

php - 从 Google map img 的 src 中提取坐标

php - 数组值与字符串 PHP 的匹配

php - preg_match 返回通知 : Undefined offset