【问题标题】:PHP regular expression for positive number with 0 or 2 decimal places带有 0 或 2 位小数的正数的 PHP 正则表达式
【发布时间】:2023-03-24 15:28:01
【问题描述】:

我正在尝试使用以下正则表达式来检查字符串是否为小数位为零或 2 的正数:

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

当我尝试使用 preg_match 进行匹配时,出现错误:

警告:preg_match():在第 862 行的 /Library/WebServer/Documents/lib/forms.php 中找不到结束分隔符 '^'

我做错了什么?

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    错误是关于缺少分隔符 /# 等,请确保将正则表达式包含在分隔符中:

    if (preg_match('/^\d+(\.(\d{2}))?$/', $text))
    {
     // more code
     return true;
    }
    

    或者:

    if (preg_match('#^\d+(\.(\d{2}))?$#', $text))
    {
     // more code
     return true;
    }
    

    【讨论】:

    • 分隔符不限于/#,您可以使用任何非字母数字(不包括空格和反斜杠),例如*, @, |, !,..... 都是有效的分隔符。
    • @nico:这是有用的补充。谢谢
    • @Sarraz Ahmed:没​​问题!很高兴知道,因为您实际搜索some weird /#/ string 的时间(嘿,您永远不会知道!)您可能会发现使用! 作为分隔符更容易! :)
    【解决方案2】:

    对于 PHP 的 preg 函数套件,正则表达式必须用分隔符指定,例如 /;例如,/[a-z]/ 将匹配从az 的任何字符。当您给它字符串"^\\d+(.(\\d{2}))?$" 时,它希望将正则表达式视为\\d+(.(\\d{2}))?$,由^s 分隔,但它找不到第二个^。因此,修复就像"/^\\d+(.(\\d{2}))?$/" 一样简单,您需要修复的另一件事是.;这是一个将匹配 any 非换行符的元字符;对于文字时间段,您需要\.。这为您提供了正则表达式"/^\d+(\.(\d{2}))?$/"。另外请注意,如果您不想要捕获组,可以使用"/^\d+(?:\.(\d{2}))?$/",这会将小数点后的数字放在$1 中,而不是$2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多