作者:陈俊英围脖_687 | 来源:互联网 | 2023-02-05 11:23
我正在使用Laravel,我正在尝试验证色域.该文本框应仅允许HEX
,rgb
,rgba
,hsl
和hsla
使用正则表达式的颜色.
在我的控制器中,我有这种模式,但它没有验证我的字段值.任何字符串都将通过验证.
$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
],
]);
谢谢.
1> Thomas Ayoub..:
你应该添加锚点(^
和$
):
'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)
颜色无效.
如果你想要一个更加防弹的正则表达式,使用这个(演示):
^(\#[\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*%)\))$
给予好评.我喜欢防弹正则表达式.看起来很坚固:http://sandbox.onlinephpfunctions.com/code/7ea50ebe40909e13efbcf53d69d915ca88cbcdd3
2> Sahil Gulati..:
希望这会帮助你.在下面的正则表达式中,我也在处理空间,
1. #[a-zA-Z0-9]{6}
匹配字符串#090f00
2. rgb\((?:\s*\d+\s*,){2}\s*[\d]+\)
这将匹配字符串rgb(10, 10, 20)
3. rgba\((\s*\d+\s*,){3}[\d\.]+\)
这将匹配字符串rgba(100,100,100,0.9)
4. hsl\(\s*\d+\s*(\s*\,\s*\d+\%){2}\)
将匹配字符串如hsl(10,30%,40%)
5. hsla\(\s*\d+(\s*,\s*\d+\s*\%){2}\s*\,\s*[\d\.]+\)
这将匹配字符串hsla(120, 60%, 70%, 0.3)
正则表达式:
#[a-zA-Z0-9]{6}|rgb\((?:\s*\d+\s*,){2}\s*[\d]+\)|rgba\((\s*\d+\s*,){3}[\d\.]+\)|hsl\(\s*\d+\s*(\s*\,\s*\d+\%){2}\)|hsla\(\s*\d+(\s*,\s*\d+\s*\%){2}\s*\,\s*[\d\.]+\)
正则表达式演示