es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.