Estoy usando Laravel y estoy tratando de validar un campo de color. Este cuadro de texto solo debe permitir colores HEX , rgb , rgba , hsl y hsla usando el patrón regex.
En mi controlador tengo este patrón pero no está validando el valor de mi campo. Cualquier cadena pasará la validación.
$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 ], ]);Gracias.
Debe agregar anclas ( ^ y $ ):
'regex:/^(#(?:[0-9a-f]{2}){2,4}|#[0-9a-f]{3}|(?:rgba?|hsla?)\((?:\d+%?(?:deg|rad|grad|turn)?(?:,|\s)+){2,3}[\s\/]*[\d\.]+%?\))$/i', ^ ^Para hacer que la expresión regular se aplique a toda la entrada en lugar de solo hacerla coincidir.
Pero tenga en cuenta que su patrón permite entradas como rgba(1024, 1023, 0) que es un color no válido.
Si desea una expresión regular más a prueba de balas, use esto ( demostración ):
^(\#[\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*%)\))$Espero que esto te ayude. En la siguiente expresión regular, también me ocupo de los espacios,
1.
#[a-zA-Z0-9]{6}para una cadena coincidente como#090f002.
rgb\((?:\s*\d+\s*,){2}\s*[\d]+\)esto coincidirá con una cadena comorgb(10, 10, 20)3.
rgba\((\s*\d+\s*,){3}[\d\.]+\)esto coincidirá con una cadena comorgba(100,100,100,0.9)4.
hsl\(\s*\d+\s*(\s*\,\s*\d+\%){2}\)esto coincidirá con una cadena comohsl(10,30%,40%)5.
hsla\(\s*\d+(\s*,\s*\d+\s*\%){2}\s*\,\s*[\d\.]+\)esto coincidirá con la cadena comohsla(120, 60%, 70%, 0.3)
expresión regular:
#[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\.]+\)