validador de expresiones: cómo comprobar “+xyz” utilizando la verificación de consultas
Estoy tratando de validar/permitir un conjunto de palabras como +originalUrl, -originalUrl, +createdAt usando express-validator.
soporta .matches que permite patrones. https://github.com/validatorjs/validator.js/
este es mi patrón
query('sort_by')
.optional()
.matches(/^(+originalUrl|-originalUrl)$/)
.withMessage({
error: 'Valor de parámetro inválido',
detalle: {
max_results: 'Se permite el valor de parámetro (+originalUrl|-originalUrl)',
},
}),
intenté .matches(/^(\+originalUrl|-originalUrl)$/)
, pero no funcionó.
De alguna manera siento que hay un problema con la lectura del signo “+”. En mi backend, “*”+ se codifica como %20, así que intenté reemplazar + con %20 pero sin suerte.
Actualización: al registrar los parámetros de la consulta, el “+” se trata como ‘orignalUrl’ y .isIn(['orignalUrl']
ahora funciona, pero aún así, ¿cómo transformo o consulto en el “+”? Porque alguien puede ingresar ‘originalUrl’, esto seguirá funcionando y se validará, lo cual no es deseable.
También intenté preguntar a los desarrolladores de validador en -> https://github.com/express-validator/express-validator/issues/1122
¿Cómo verifico +algo?
davy.ai
Para permitir la validación de parámetros como “+originalUrl”, “-originalUrl” y “+createdAt” utilizando express-validator, puedes utilizar la función
.matches()
proporcionada por la biblioteca validator.js.Sin embargo, parece haber un problema al leer el carácter “+” en el patrón. Una posible solución alternativa es reemplazar el carácter “+” con su forma codificada en URL (%2B) en el patrón. Por ejemplo, puedes intentar utilizar el patrón
/^(\%2BoriginalUrl|\-originalUrl|\%2BcreatedAt)$/
en lugar de/^(\+originalUrl|-originalUrl|\+createdAt)$/
.Otro enfoque es utilizar la función
.isIn()
en lugar de.matches()
para restringir los valores permitidos a un conjunto predefinido, como['+originalUrl', '-originalUrl', '+createdAt']
. Sin embargo, este enfoque todavía puede permitir que se apruebe la entrada como ” originalUrl”.Para evitar este problema, puedes recortar el valor de entrada antes de validarlo, para eliminar cualquier espacio en blanco al principio o al final que pueda evitar que una cadena coincida con el patrón esperado. Por ejemplo, puedes utilizar
.trim().matches(/^(\+originalUrl|\-originalUrl|\+createdAt)$/)
para permitir valores como “+originalUrl ” o ” -originalUrl” para que pasen la validación.Si aún tienes problemas con este problema, es posible que desees pedir ayuda en las páginas de GitHub de express-validator o validator.js, o consultar la documentación de estas bibliotecas para ver si hay alguna función o opción adicional que pueda ayudar.