为什么我的preg_match()突然停止工作? PHP

时间:2017-11-23 12:25:24

标签: php regex preg-match

您好我之前遇到过这些preg_match的问题。我知道它与“外围仪”有关,但我不知道为什么以及如何修复......

这个功能完美地工作了一个星期。但突然今天它停止了匹配。我认为它与我在白天添加的其他代码有关。因此,为了本地化问题,我将我的文件回滚到以前的版本,它正在工作。只是意识到它不再有效..............

是否存在我服务器中的内存缓存某些模式?或者那些已经工作的东西怎么可能不再起作用呢?

这是我的功能,它以所有允许的格式精美地返回颜色代码,但现在它只返回#000000,无论我喂它是什么。

function validateColor($input){
    $match = preg_match("/^(\#[\da-f]{3}|\#[\da-f]{6}|rgba\(((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)(,\s*(0\.\d+|1))\)|hsla\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)(,\s*(0\.\d+|1))\)|rgb\(((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)|hsl\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)\))$/",$input);
    if(!$match){
        return '#000000';
    }
    return $input;
}

1 个答案:

答案 0 :(得分:2)

您需要确保匹配)替代rgb,并在其中添加\)

/^(\#[\da-f]{3}|\#[\da-f]{6}|rgba\(((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)(,\s*(0\.\d+|1))\)|hsla\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)(,\s*(0\.\d+|1))\)|rgb\(((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)\)|hsl\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)\))$/

请参阅regex demo

Expanded version

^(
  \#[\da-f]{3}
 |\#[\da-f]{6}
 |rgba\(
         ((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}
         ((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)
         (,\s*(0\.\d+|1))
      \)
 |hsla\(
       \s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,
       \s*((\d{1,2}|100)\s*%)\s*,
       \s*((\d{1,2}|100)\s*%)
       (,\s*(0\.\d+|1))
     \)
 |rgb\(
         ((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}
         ((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)
       \) # HERE
 |hsl\(
       \s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,
       \s*((\d{1,2}|100)\s*%)\s*,
       \s*((\d{1,2}|100)\s*%)
     \)
)$