Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

362
Views
Angular: Validación de campo numérico usando directiva

Estoy tratando de validar un campo de entrada: número usando la directiva. El propósito del campo es aceptar solo números entre 0-9 o un número decimal hasta 3 lugares decimales (los números serán positivos todo el tiempo sin ningún símbolo).

Como hay más de 30 campos del mismo tipo, se pensó en crear una directiva que evite que los usuarios ingresen caracteres innecesarios.

A continuación se muestra mi código para el mismo junto con una muestra de Stackblitz :

Directiva:

 import { Directive, HostListener } from '@angular/core'; @Directive({ selector: '[validTestValue]' }) export class NumberDirective { @HostListener('keydown', ['$event']) @HostListener('input', ['$event']) onKeyDown(e) { const key = ['Backspace', 'Delete', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.']; let check = key.includes(e.key) && /^\d{1,7}((.)|(.\d{0,3})?)$/.test(e.target.value); console.log(check) if (!check) { e.preventDefault(); } } }

HTML:

 <input type="number" validTestValue class="testInput-field text-center" /> <!--Same input fields are there many times in my code-->

El problema con este código es que puedo ingresar el valor que deseaba, es decir, solo se aceptan dígitos y el punto decimal, pero surgen algunos otros problemas como los siguientes:

  1. El resultado exceptuado debe tener un máximo de 7 dígitos, sea o no un número decimal. Ejemplo: 1, 12, 1234567
  2. Si es un número decimal, un máximo de 7 dígitos antes del decimal y un máximo de 3 dígitos después del decimal. Ejemplo: 1, 1.2, 1.12, 1.123
  3. No se puede retroceder (si se alcanza la longitud) ni mover el cursor.
  4. Si el campo está en blanco sin ningún valor predeterminado
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Creo que el problema está en tu regx

/^\d{1,7}((.)|(.\d{0,3})?)

esto permite de 1 a 7 dígitos ({1,7} coincide con el token anterior entre 1 y 7 veces, tantas veces como sea posible)

Esto es lo que estoy usando actualmente. Puede controlar cuántos puntos decimales se permiten en un campo

directiva de solo números

En archivo de plantilla

 <input type="text" numbers-only="2" placeholder=""
about 4 years ago · Juan Pablo Isaza Report

0

Según la solución de Dilshan, solo verificará la cantidad de dígitos después del decimal y tampoco validará espacios según su expresión regular. Estoy actualizando un poco la solución de Dilshan para cumplir con sus requisitos según tengo entendido.

REGEX: ^([\d]{0,7})((\.{1})([\d]{1,3})?)?$

HTML: <input type="text" validateNumber="7.3" />

Esta es la solución de Stackblitz para su referencia.

Espero que esto te ayude 😊.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!