ค้นหาเว็บไซต์

typescript - Angular 8: ทำให้ FormBuilder รับเฉพาะตัวเลข พร้อมช่วงของค่าละติจูดและลองจิจูด


ฉันจะทำให้ FormBuilder ต้องกรอกตัวเลขได้อย่างไร?

ฉันกำลังเขียน Formbuilder สำหรับละติจูดและลองจิจูด ในด้านล่างนี้,

  • การเขียน -91 หรือ 91 จะทำให้เกิดข้อผิดพลาดในการตรวจสอบ ถูกทำงานตามที่คาดไว้
  • อะไรก็ตามระหว่าง -90 ถึง 90 ใช้ได้ ซึ่งดี
  • มันรับตัวเลขได้สูงสุด 32 หลักและจุดทศนิยม รวมถึงยังทำงานได้

ปัญหา :

  • อย่างไรก็ตาม การพิมพ์ตัวอักษรเช่น 'Abcd' เป็นต้น จะไม่ทำให้เกิดข้อผิดพลาดในการตรวจสอบความถูกต้อง

นี่สามารถแก้ไขได้อย่างไร?

  'latitude': [null, [Validators.maxLength(32), Validators.min(-90), Validators.max(90)]],

หากเป็นไปได้ ควรใช้การตรวจสอบความถูกต้องในฟอร์ม แทนการใช้กล่องข้อความป้อนข้อมูล type=number

คำตอบ #1

คุณสามารถใช้ประเภทอินพุตตัวเลขได้ ซึ่งจะบล็อกตัวอักษรใดๆ

<input type="number" formControlName="latitude" />

อีกตัวเลือกหนึ่งคือการใช้ Validators.pattern เพื่ออนุญาตเฉพาะตัวเลข ซึ่งจะตั้งค่าควบคุมให้เป็นไม่ถูกต้องหากคุณป้อนตัวอักษรที่ไม่ถูกต้อง

   latitude: [
        null,
        [
          Validators.maxLength(32),
          Validators.min(-90),
          Validators.max(90),
          Validators.pattern(/\-?\d*\.?\d{1,2}/)
        ]
      ]

สาธิต 🚀🚀

คำตอบ #2

คุณก็สามารถทำได้ด้วยไลบรารี ng2-validation

import { CustomValidators } from 'ng2-validation';

ช่วง

new FormControl('', CustomValidators.range([10, 20]))

ตัวเลข

 new FormControl('', CustomValidators.digits)

ใช้มันเป็น

latitude: [null,
           [CustomValidators.digits,CustomValidators.range([-90, 90])]         
          ]

บทความที่เกี่ยวข้อง