gpt4 book ai didi

php - 在 php 中使用正则表达式验证十六进制和 rgba 颜色

转载 作者:可可西里 更新时间:2023-11-01 13:39:49 45 4
gpt4 key购买 nike

text field

我正在使用 Laravel 并尝试验证颜色字段。此文本框应仅允许 HEXrgbrgbahslhsla使用正则表达式模式的颜色。

在我的 Controller 中,我有这个模式,但它没有验证我的字段值。任何字符串都会通过验证。

$this->validate($request, [
'color' => [
'required',
'regex:/(#(?:[0-9a-f]{2}){2,4}|#[0-9a-f]{3}|(?:rgba?|hsla?)\((?:\d+%?(?:deg|rad|grad|turn)?(?:,|\s)+){2,3}[\s\/]*[\d\.]+%?\))/i', // <--- not working
],
]);

谢谢。

最佳答案

您应该添加 anchor (^$):

'regex:/^(#(?:[0-9a-f]{2}){2,4}|#[0-9a-f]{3}|(?:rgba?|hsla?)\((?:\d+%?(?:deg|rad|grad|turn)?(?:,|\s)+){2,3}[\s\/]*[\d\.]+%?\))$/i',
^ ^

使正则表达式应用于整个输入而不是仅仅匹配它。

但请注意,您的模式允许像 rgba(1024, 1023, 0) 这样的输入,这是一种无效的颜色。


如果你想要一个更可靠的正则表达式,使用这个(demo):

^(\#[\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 - 在 php 中使用正则表达式验证十六进制和 rgba 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706082/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com