Cómo validar formularios en Vue.js

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Configuración de un proyecto Vue.js con VeeValidate
    1. Cómo agregar Bootstrap y Font Awesome
    2. Construyendo el marcado del formulario
  • Paso 2: creación y montaje de una instancia de Vue
  • Paso 3 — Agregar ValidationObserveryValdiationProvider
  • Paso 4: Uso de las reglas de VeeValidate
    1. Aplicación de reglas
    2. Aplicación de múltiples reglas
    3. Aplicación de la validación entre campos
    4. Agregar una regla personalizada
  • Paso 5: Acceso a errores y banderas de VeeValidate
  • Paso 6 — Manejo del envío del formulario
  • Conclusión
  • La validación de formularios, también conocida como validación de campos de formulario, garantiza que el usuario complete todos los campos obligatorios de un formulario web. Si un campo tiene un valor no válido, se mostrará un mensaje de error y se impedirá el envío del formulario hasta que los valores cumplan con todas las reglas.

    La validación basada en plantillas es un tipo de validación de formulario donde las reglas de validación se establecen directamente en los elementos del formulario mediante directivas.

    Para implementar validaciones basadas en plantillas en Vue.js, podemos usar VeeValidate. VeeValidate es un complemento para Vue.js que permite validar campos de entrada y mostrar errores.

    Aquí hay una imagen animada de lo que construirás en este tutorial:

    Al final de este tutorial, tendrá un formulario de registro que utiliza VeeValidate para validar los campos de entrada.

    Prerrequisitos

    Este tutorial presupone el conocimiento de cadenas y objetos de JavaScript. Es conveniente tener cierta familiaridad con Vue, pero no es obligatorio. Para obtener más información sobre Javascript, consulta la serie Cómo codificar en Javascript.

    Nos centraremos en la creación de un único archivo HTML local con referencias a varias bibliotecas alojadas en la nube. Es posible @vue/clicrear un proyecto Vue y utilizar un administrador de paquetes para instalarlo vee-validate; sin embargo, ese enfoque queda fuera del alcance de este tutorial.

    Paso 1: Configuración de un proyecto Vue.js con VeeValidate

    Necesitará el marco Vue.js y la biblioteca VeeValidate.

    Primero, usa tu terminal para crear un nuevo archivo llamado register.html:

    1. nano register.html

    Y agrega un código inicial para una página web:

    registrarse.html

    htmlhead  meta charset="utf-8"  meta name="viewport" content="width=device-width,initial-scale=1.0"  titleVue Template Form Validation/title/headbody  !-- ... --/body/html

    Hay una compilación de navegador para Vue.js disponible en cdnjs. Hay una compilación de navegador para VeeValidate disponible en jsdelivr. Agregue ambas al bodyarchivo register.html:

    registrarse.html

    body  !-- include the Vue.js framework --  script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.min.js"/script  !-- include the VeeValidate library --  script src="https://cdn.jsdelivr.net/npm/vee-validate@3.3.8/dist/vee-validate.min.js"/script/body

    Estos archivos son proporcionados por CDN (redes de distribución de contenido). No es necesario descargar ni guardar nada localmente.

    Ahora tienes una página web lista para usar las últimas versiones estables (al momento de escribir este artículo) de Vue.js y VeeValidate.

    Cómo agregar Bootstrap y Font Awesome

    Para darle estilo, puedes usar Bootstrap. Para agregar iconografía, también puedes usar Font Awesome.

    Las compilaciones de navegador para Bootstrap y Font Awesome están disponibles en BootstrapCDN. Agregue ambas al headarchivo register.html:

    registrarse.html

    head  meta charset="utf-8"  meta name="viewport" content="width=device-width,initial-scale=1.0"  titleVue Template Form Validation/title  !-- include the Bootsrap framework --  link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"  !-- include Font Awesome --  link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/head

    En este punto, tienes Vue, VeeValidate, Bootstrap y Font Awesome. A continuación, crearás el formulario para validar.

    Construyendo el marcado del formulario

    Este formulario de ejemplo solicitará cinco datos al usuario. Necesitará un name, email, username, passwordy password_confirmation.

    Primero, agregue un marcado inicial para el formulario al final bodydel register.htmlarchivo antes de las scriptetiquetas:

    registrarse.html

    body  div    div      div        h1Sign up once and watch any of our free demos./h1        div          form          !-- ... form fields ... --          /form        /div      /div    /div  /div  !-- ... library script tags ... --/body

    Este código establece un espacio vacío formy utiliza algunas utilidades Bootstrap para el diseño y la apariencia.

    A continuación, agregue los campos del formulario al form. Comience con el campo para name:

    registrarse.html

    form  div    label for="name"Your Name/label    div      spanspani aria-hidden="true"/i/span/span      input type="text" name="name" placeholder="Name" /    /div  /div/form

    Este código crea un labelpara name, un icono de Font Awesome para fa-usery un inputpara name.

    Puede realizar adiciones similares a formlos demás datos email: , username, password, y password_confirmation:

    registrarse.html

    form  !-- ... name ... --  div    label for="email"Your Email/label    div      spanspani aria-hidden="true"/i/span/span      input type="email" name="email" placeholder="email@example.com" /    /div  /div  div    label for="username"Username/label    div      spanspani aria-hidden="true"/i/span/span      input type="text" name="username" placeholder="Enter your username" /    /div  /div  div    label for="password"Password/label    div      spanspani aria-hidden="true"/i/span/span      input type="password" name="password" placeholder="Enter a password" /    /div  /div  div    label for="password_confirmation"Confirm Password/label    div      spanspani aria-hidden="true"/i/span/span      input type="password" name="password_confirmation" placeholder="Re-type password" /    /div  /div/form

    Este código crea labels, íconos de Font Awesome y inputs. Cada entrada tiene un idy único name.

    Añade un botón para que el registro complete el form:

    registrarse.html

    form  !-- ... form fields ... --  div    button type="submit"Register/button  /div/form

    Este código crea un botón de envío grande usando estilos Bootstrap.

    Puede abrirlo register.htmlen un navegador web para comprobar el progreso de la aplicación.

    Paso 2: creación y montaje de una instancia de Vue

    A continuación, creará una instancia de Vue y la montará en #signup-form.

    Añade una nueva scriptetiqueta al final bodyy define signupForm:

    registrarse.html

    body  !-- ... form ... --  !-- ... library script tags ... --  script    const signupForm = new Vue({      el: '#signup-form'    });  /script/body

    Añadir propiedades al dataobjeto:

    registrarse.html

    body  !-- ... form ... --  !-- ... library script tags ... --  script    const signupForm = new Vue({      el: '#signup-form',      data: {        name: '',        email: '',        username: '',        password: '',        password_confirmation: ''      }    });  /script/body

    Luego, haga referencia a las propiedades con v-modelen cada uno de los campos.

    Para el namecampo, agregue lo siguiente:

    registrarse.html

    input type="text" name="name" placeholder="Name" v-model="name" /

    Para el emailcampo, agregue lo siguiente:

    registrarse.html

    input type="email" name="email" placeholder="email@example.com" v-model="email" /

    Para el usernamecampo, agregue lo siguiente:

    registrarse.html

    input type="text" name="username" placeholder="Enter your username" v-model="username" /

    Para el passwordcampo, agregue lo siguiente:

    registrarse.html

    input type="password" name="password" placeholder="Enter a password" v-model="password" /

    Finalmente, para el password_confirmationcampo, agregue lo siguiente:

    registrarse.html

    input type="password" name="password_confirmation" placeholder="Re-type password" v-model="password_confirmation" /

    En este punto, tienes una instancia de Vue con modelos para name, email, username, passwordy password_confirmation.

    Paso 3 — Agregar ValidationObserveryValdiationProvider

    A continuación, tendrás que registrarte ValidationObservery ValidationProvider.

    Puedes agregar ambos a una nueva scriptetiqueta al final de body:

    registrarse.html

    body  !-- ... form ... --  !-- ... library script tags ... --  script    Vue.component('validation-observer', VeeValidate.ValidationObserver);    Vue.component('validation-provider', VeeValidate.ValidationProvider);  /script  !-- ... vue instance script tag ... --/body

    Ahora, puedes usar validation-observerpara encapsular todo el form. Y puedes usar validation-providerpara encapsular los campos:

    registrarse.html

    validation-observer  form    div      validation-provider        label for="name"Your Name/label        div          spanspani aria-hidden="true"/i/span/span          input type="text" name="name" placeholder="Name" v-model="name" /        /div      /validation-provider    /div    div      validation-provider        label for="email"Your Email/label        div          spanspani aria-hidden="true"/i/span/span          input type="email" name="email" placeholder="email@example.com" v-model="email" /        /div      /validation-provider    /div    div      validation-provider        label for="username"Username/label        div          spanspani aria-hidden="true"/i/span/span          input type="text" name="username" placeholder="Enter your username" v-model="username" /        /div      /validation-provider    /div    div      validation-provider        label for="password"Password/label        div          spanspani aria-hidden="true"/i/span/span          input type="password" name="password" placeholder="Enter a password" v-model="password" /        /div      /validation-provider    /div    div      validation-provider        label for="password_confirmation"Confirm Password/label        div          spanspani aria-hidden="true"/i/span/span          input type="password" name="password_confirmation" placeholder="Re-type password" v-model="password_confirmation" /        /div      /validation-provider    /div    div      button type="submit"Register/button    /div  /form/validation-observer

    Ahora tienes un formulario preparado con validation-observery valdiation-provider.

    Paso 4: Uso de las reglas de VeeValidate

    Una regla VeeValidate establece límites o condiciones sobre lo que se puede ingresar en uno o más campos. Las reglas de validación se verifican cuando se actualiza un registro que contiene campos que requieren validación. Si se infringe la regla, se produce un error que se puede detectar.

    Por ejemplo, puedes utilizar el requiredvalidador:

    validation-provider rules="required"

    Puede pasar múltiples validaciones separadas por un carácter de barra vertical ( |).

    Por ejemplo, puedes utilizar los validadores requiredy email:

    validation-provider rules="required|email"

    Alternativamente, puedes pasar un objeto para mayor flexibilidad:

    validation-provider :rules="{ required: true, email: true, regex: /[0-9]+/ }"

    Ahora, cada vez que la entrada cambia, el validador ejecutará la lista de validaciones de izquierda a derecha, completando el objeto auxiliar de errores siempre que una entrada falle la validación.

    Al momento de escribir este tutorial, VeeValidate tiene 30 reglas para la validación de formularios con la opción de crear sus propias reglas.

    Aplicación de reglas

    A continuación, debes importar el VeeValidateRulesarchivo .

    Puedes agregarlo a una nueva scriptetiqueta al final del bodyarchivo register.html:

    registrarse.html

    body  !-- ... form ... --  !-- ... library script tags ... --  script src="https://cdn.jsdelivr.net/npm/vee-validate@3.3.8/dist/rules.umd.js"/script  !-- ... vue instance tags ... --/body

    Luego, puedes recorrer las reglas para que todas estén disponibles:

    registrarse.html

    body  !-- ... form ... --  !-- ... library script tags ... --  script    Object.keys(VeeValidateRules).forEach(rule = {      VeeValidate.extend(rule, VeeValidateRules[rule]);    });  /script  !-- ... vue instance tags ... --/body

    Y aplicar requiredreglas para todas las entradas:

    registrarse.html

    validation-provider rules="required"

    Aplicación de múltiples reglas

    Para email, también aplicará una regla para direcciones de correo electrónico válidas:

    registrarse.html

    validation-provider rules="required|email"

    También passwordse aplicará una regla para una longitud mínima de 6caracteres:

    registrarse.html

    validation-provider rules="required|min:6"

    Ahora, tienes required, email, y minreglas para los campos.

    Aplicación de la validación entre campos

    Para que sea válido, password_confirmationdeberá coincidir con el valor de password. Para lograrlo, se apoyará en ValidationObserver, que permite password_confirmationconocer password.

    Añade el vidal passwordcampo, para que password_confirmedtenga un objetivo:

    registrarse.html

    validation-provider rules="required|min:6" vid="password"

    Añade la confirmedregla al password_confirmationcampo, de modo que password_confirmedcompare su valor con el valor de password:

    registrarse.html

    validation-provider rules="required|confirmed:password"

    Ahora, tienes required, email, min, y confirmedreglas para los campos.

    Agregar una regla personalizada

    VeeValidate le permite escribir reglas y mensajes de validación personalizados con extendy validate.

    Agregue una regla que impida que los usuarios se registren con algunas palabras restringidas. En este ejemplo, restringirá que los usuarios utilicen las palabras admin, password, y administrator:

    registrarse.html

    body  !-- ... form ... --  !-- ... library script tags ... --  script    // Declare an array of usernames that are invalid.    const restricted_usernames = [      'admin',      'password',      'administrator'    ];    // Extend the custom rule.    VeeValidate.extend('checkuser', {      name: 'Restricted Usernames',      validate: value = {        return restricted_usernames.includes(value.toLowerCase()) ? false : !! value      },      message: 'That {_field_} is unavailable.',    });  /script  !-- ... vue instance tags ... --/body

    Añade la regla personalizada al usernamecampo:

    registrarse.html

    validation-provider rules="required|checkuser"

    Ahora, tienes required, email, min, confirmedy checkuserreglas para los campos. Todas las reglas están establecidas y ahora puedes comenzar a mostrar mensajes de error.

    Paso 5: Acceso a errores y banderas de VeeValidate

    VeeValidate está errorsdisponible. VeeValidate también tiene múltiples indicadores para la información de estado. Puede acceder a ellos mediante Vue v-slot.

    También utilizará Vue v-showpara mostrar los mensajes de error de VeeValidate y utilizará la clase Bootstrap invalid-feedbackpara dar estilo a los errores.

    Además, utilizará los indicadores VeeValidate para dirty, validy en combinación con las clases invalidde Vue v-bind:classy Bootstrap para diseñar los campos:is-validis-invalid

    registrarse.html

    validation-observer  form    div      validation-provider rules="required|alpha" v-slot="{ dirty, valid, invalid, errors }"        label for="name"Your Name/label        div          spanspani aria-hidden="true"/i/span/span          input type="text" name="name" placeholder="Name" v-model="name" v-bind:class="{ 'is-valid': dirty  valid, 'is-invalid': dirty  invalid }" /        /div        div v-show="errors"{{ errors[0] }}/div      /validation-provider    /div    div      validation-provider rules="required|email" v-slot="{ dirty, valid, invalid, errors }"        label for="email"Your Email/label        div          spanspani aria-hidden="true"/i/span/span          input type="email" name="email" placeholder="email@example.com" v-model="email" v-bind:class="{ 'is-valid': dirty  valid, 'is-invalid': dirty  invalid }" /        /div        div v-show="errors"{{ errors[0] }}/div      /validation-provider    /div    div      validation-provider rules="required|checkuser" v-slot="{ dirty, valid, invalid, errors }"        label for="username"Username/label        div          spanspani aria-hidden="true"/i/span/span          input type="text" name="username" placeholder="Enter your username" v-model="username" v-bind:class="{ 'is-valid': dirty  valid, 'is-invalid': dirty  invalid }" /        /div        div v-show="errors"{{ errors[0] }}/div      /validation-provider    /div    div      validation-provider rules="required|min:6" vid="password" v-slot="{ dirty, valid, invalid, errors }"        label for="password"Password/label        div          spanspani aria-hidden="true"/i/span/span          input type="password" name="password" placeholder="Enter a password" v-model="password" v-bind:class="{ 'is-valid': dirty  valid, 'is-invalid': dirty  invalid }" /        /div        div v-show="errors"{{ errors[0] }}/div      /validation-provider    /div    div      validation-provider rules="required|confirmed:password" v-slot="{ dirty, valid, invalid, errors }"        label for="password_confirmation"Confirm Password/label        div          spanspani aria-hidden="true"/i/span/span          input type="password" name="password_confirmation" placeholder="Re-type password" v-model="password_confirmation" v-bind:class="{ 'is-valid': dirty  valid, 'is-invalid': dirty  invalid }" /        /div        div v-show="errors"{{ errors[0] }}/div      /validation-provider    /div    div      button type="submit"Register/button    /div  /form/validation-observer

    En este punto, tiene acceso a dirty, valid, invalidy errors. Agregó lógica para mostrar mensajes de error como comentarios debajo del campo asociado. Si se interactúa con el campo y este no es válido, se aplicará is-invalidla clase de Bootstrap. Si se interactúa con el campo y este es válido, se aplicará is-validla clase de Bootstrap.

    En el siguiente paso, usted se encargará de enviar el formulario.

    Paso 6 — Manejo del envío del formulario

    VeeValidate también proporciona un invalidindicador ValidationObservery una handleSubmitfunción. Puede acceder a ellos mediante Vue v-slot:

    registrarse.html

    validation-observer v-slot="{ invalid, handleSubmit }"

    Utilice los modificadores de eventos de Vue para capturar el envío de formularios con @submit.prevent. También utilizará VeeValidate handleSubmitpara evitar el envío de formularios hasta que todos los campos sean válidos:

    registrarse.html

    form @submit.prevent="handleSubmit(onSubmit)"

    Esta llamada onSubmitse puede definir como un console.logmensaje:

    registrarse.html

    script  const signupForm = new Vue({    el: '#signup-form',    data: {      name: '',      email: '',      username: '',      password: '',      password_confirmation: ''    },    methods: {      onSubmit: function() {        console.log('Form has been submitted!');      }    }  });/script

    Manténgalo buttonen un disabledestado en el que no se enviará información mientras haya campos invalid:

    registrarse.html

    button type="submit" v-bind:disabled="invalid"Register/button

    En este punto, puedes abrirlo register.htmlen un navegador web e interactuar con el formulario para probar las validaciones.

    Conclusión

    En este tutorial, ha demostrado cómo validar las entradas de formularios mediante el método basado en plantillas. VeeValidate le ha permitido validar las entradas de formularios con reglas existentes, ampliar reglas nuevas, mostrar errores y gestionar el envío de formularios.

    Si desea obtener más información sobre Vue.js, consulte nuestra página de temas de Vue.js para obtener ejercicios y proyectos de programación.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion