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

Why did my preg_match() suddenly stop working? php

嗨,我以前遇到过这些问题 preg_match。我知道它与 "delimeter" 有关,但我不知道为什么以及如何解决...

这个功能完美运行了一周。但是今天突然停止匹配了。我认为这与我白天添加的一些其他代码有关。因此,为了定位问题,我将我的文件回滚到它工作的以前版本。才发现已经不行了......

我的服务器内存是否缓存了一些模式?或者为什么一直有效的东西不再有效了?

这是我的函数,它以所有允许的格式漂亮地返回颜色代码,但现在无论我输入什么,它都只返回 #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;
}

您需要确保在 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*%)
     \)
)$