2017-06-14 9 views
6

mam niestandardową walidatora, który sprawdza, czy pole wejściowe ma liczbę wprowadzoną do niego. enter image description herekątowa 2 zwyczaj sprawdzania poprawności numerów i wartości dziesiętnych

Kod wygląda tak:

import { AbstractControl, ValidatorFn } from '@angular/forms'; 

export class NumberValidators { 

    static isNumberCheck(): ValidatorFn { 
    return (c: AbstractControl): {[key: string]: boolean} | null => { 
     if (c.value !== undefined && (isNaN(c.value))) { 
     return { 'value': true }; 
     } 

     return null; 
    }; 
    } 
} 

Ale problem mam jest kiedy wprowadzić wartość dziesiętną jest podniesienie flagi walidacji, które nie chcę. Chcę, aby pole wejściowe zawierało liczby całkowite i liczby dziesiętne. Czy ktoś może mi pomóc to poprawić.

Poniżej jest mój kod szablonu za pomocą parsleyjs walidacji

<div class="form-group row"> 
 
       <label for="upperbeltposition" class="col-md-6 col-form-label">Upper Belt Position (mm) <span class="required">*</span></label> 
 
       <div class="col-md-5"> 
 
       <input class="form-control input-transparent " id="upperbeltposition" type="text" formControlName="upperbeltposition" data-parsley-trigger="blur" 
 
        required="required" data-parsley-type="number"/> 
 
       </div> 
 
      </div> 
 
      <div class="form-group row"> 
 
       <label for="platformxposition" class="col-md-6 col-form-label">Platform X Position (mm) <span class="required">*</span></label> 
 
       <div class="col-md-5"> 
 
       <input class="form-control input-transparent " id="platformxposition" type="text" formControlName="platformxposition" data-parsley-trigger="blur" 
 
        required="required" data-parsley-type="number"/> 
 
       </div> 
 
      </div> 
 
      <div class="form-group row"> 
 
       <label for="platformyposition" class="col-md-6 col-form-label">Platform Y Position (mm) <span class="required">*</span></label> 
 
       <div class="col-md-5"> 
 
       <input class="form-control input-transparent " id="platformyposition" type="text" formControlName="platformyposition" data-parsley-trigger="blur" 
 
        required="required" data-parsley-type="number"/> 
 
       </div> 
 
      </div>

iw moim Komponentu używam formy biernej i poniżej jest mój kod

upperbeltposition: ['', [Validators.required, NumberValidators.isNumberCheck]], 
 
platformxposition: ['', [Validators.required, NumberValidators.isNumberCheck]], 
 
platformyposition: ['', [Validators.required, NumberValidators.isNumberCheck]]

dzięki!

+0

Istnieje obszerna writeup na użyciu NaN tutaj: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN Coś tam maja być pomocnym. I zgodnie z tym odniesieniem, isNaN powinien zwracać wartość false dla wartości dziesiętnych. – DeborahK

+0

Więc muszę wyjąć że isNaN aby umożliwić liczbami i cyfry dziesiętne – ZAJ

Odpowiedz

5

Coś jak to powinno działać

import { AbstractControl, ValidatorFn } from '@angular/forms'; 

export class NumberValidators { 

    static isNumberCheck(): ValidatorFn { 
    return (c: AbstractControl): {[key: string]: boolean} | null => { 
     let number = /^[.\d]+$/.test(c.value) ? +c.value : NaN; 
     if (number !== number) { 
     return { 'value': true }; 
     } 

     return null; 
    }; 
    } 
} 
+0

No to nie działa, kiedy wprowadzić wartość dziesiętną jak 1.1655 – ZAJ

+0

Check to jsfiddle, to działa doskonale, https://jsfiddle.net/svLeh6m9/. Czy pominąłeś znak '+' przed 'c.value'? – Dummy

+0

ma to ma wspólnego z parselyjs mam w „dane-pietruszka-type =«number»” mój plik html – ZAJ

3

można używać walidacji ng-pattern

ng-pattern="^[0-9]+(.[0-9]{0,2})?$" 

można proszę sprawdzić raz jak ten

<label for="upperbeltposition" class="col-md-6 col-form-label" name="number">Upper Belt 
    Position (mm) 
     <span class="required">*</span> 
    </label> 
    <div class="col-md-5"> 
    <input class="form-control input-transparent " id="upperbeltposition" type="text" formControlName="upperbeltposition" data-parsley-trigger="blur" 
    required="required" data-parsley-type="number"/> 
<span ng-show="submitForm &&platformxposition 
    .number.$error.pattern">This value should be a valid number 
</span> 

    </div> 

Należy dodać swoją nazwę formularza. . I nazwa pola input $ error.pattern

Powiązane problemy