Skip to content

Instantly share code, notes, and snippets.

@rogerforner
Last active May 23, 2019 19:51
Show Gist options
  • Save rogerforner/ddfd83fd2f355bd833f109cd46e7909e to your computer and use it in GitHub Desktop.
Save rogerforner/ddfd83fd2f355bd833f109cd46e7909e to your computer and use it in GitHub Desktop.
AdonisJS Rule: comprobar si una cadena contiene otra (p. ej. útil para nombres de usuarios/rias)

Validator (rules)

Tienes que aplicar la regla not_contain y pasarle las cadenas que no están permitidas (entre comas):

  • not_contain:string1,string2,stringN

Un ejemplo:

get rules () {
  return {
    username: 'required|string|not_contain:admin,appName|unique:users,username',
  }
}

Info: Las cadenas no permitidas (not_contain:[...]) y el valor introducido por el usuario se pasan a minúsculas. Mirar el archivo hook.js para entender.

Bibliografía

ADONIS.JS. Validator, Extending Validator. < https://adonisjs.com/docs/4.1/validator#_extending_validator >
[Última consulta: 14 de mayo de 2019]

MDN. Array.prototype.some(). < https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some >
[Última consulta: 14 de mayo de 2019]

const { hooks } = require('@adonisjs/ignitor')
hooks.after.providersBooted(() => {
const Validator = use('Validator')
const notContainFn = async (data, field, message, args, get) => {
// Obtener el valor y pasarlo a minúsculas, así evitamos problemas con el camelcase.
let value = get(data, field).toLowerCase()
if (!value) {
return
}
// Recorrer "args" de un array observando si éstos se encuentran en "value".
args.some(function(arg) {
// arg.toLowerCase() para evitar problemas con el camelcase.
if(value.includes(arg.toLowerCase())) {
throw message
}
})
}
Validator.extend('notContain', notContainFn)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment