php 中 RGBA 值的正则表达式

Regular expression for RGBA value in php

这是我在 PHP 中的 RGBA 值的正则表达式。 它应该接受百分比模式和非百分比模式。

function isValidColor_RGBA($color){


$pattern = "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))
         \)
        |rgba\(((\d|[1-9]\d|100)%\,\s?){3}(0|0?\.\d+|1|1\.0+)\)";



return (preg_match("<$pattern>", $color) == 1)? true : false;
}

这适用于这个 JS 测试器: https://regex101.com/r/A2IjNO/4 但在 php 中不起作用。 这有什么问题吗? 提前致谢。

您可以尝试删除新行和不需要的空格吗?

我在 www.regex101.com

中尝试使用以下表达式

^(#[\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*%)))$

新的行和空格似乎使 PHP 正则表达式验证出现问题。该表达式适用于 jsPHP

我在 enter link description here

中尝试了以下代码
$pattern = '/^(\#[\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*%)\))$/';
$color = 'rgba(222, 222, 222, 0.5)';
var_dump(preg_match($pattern, $color));

请记住,您需要添加空格。因为,你添加了 \s before/after 逗号符号