10

I want to validate a 9 digits number using angular,

this is in my modal :

<input type="number" class="form-control" ng-model="id" required>

i tried pattern = [0-9]{9}, seems its passing every number that its getting . I want to pass only number 000000000 - 9999999999 , min-max also not working for me.

this is what my app adding to this class:

 class="form-control ng-pristine ng-valid-number ng-invalid ng-invalid-required"

thank u !

2
  • you have min max attributes Commented Nov 30, 2014 at 11:15
  • Cant use it, minimum value can be also 000000101 for example. Commented Nov 30, 2014 at 11:21

4 Answers 4

12

I just use a pattern as validator. The following code will make the field required and must be only digits of length 10

ngOnInit() {
    this.firstForm = this.fb.group({
        firstCtrl: ['', [Validators.pattern('^[0-9]{10}$'), Validators.required]],
    });
Sign up to request clarification or add additional context in comments.

Comments

5

Have you tried both ngMinlength and ngMaxlength at the same time?

Example:

<input type="text" ng-minlength=9 ng-maxlength=9 />

Check out the official documentation regarding this: https://docs.angularjs.org/api/ng/directive/input

Very nice tutorial about form validation: http://www.ng-newsletter.com/posts/validations.html

Comments

3

As mentioned by Rahul Desai you have to use ngMinlength and ngMaxlength.
But since you want to use numbers you have to change the code a little bit to this

<input type="number" ng-model="id" ng-minlength=9 ng-maxlength=9 required />

To be honest I don't know what to do with class="form-control". Maybe you can add it or leave it out?!

Anyway you can also try this

<input type="number" ng-model="id" ng-pattern="/^[0-9]{1,9}$/" required />

You shouldn't need min/max attribute anymore.

EDIT:
I guess I made a mistake with the second one. It should be either

ng-pattern="/^[0-9]{9}$/"

or

ng-pattern="/^[0-9]{9,9}$/"

2 Comments

it didnt work for me. it accepts (3...5) or (2.5.44)
@Alaa' what do you mean exactly? Did you try both or just one of the provided solutions? I guess I made a mistake in the second one. I didn't test it back then. The pattern one should work for sure. I don't know if angular allows dots in type 'number'.
2

With Reactive Forms you should compose validators in such a way:

formControlYourField: [
  "",
  Validators.compose([
    Validators.required,
    Validators.minLength(9),
    Validators.maxLength(9),
    Validators.pattern("^[0-9]*$"),
  ]),
]

And of course in your .html

<input
  matInput
  required
  formControlName="formControlYourField"
  type="text"
  placeholder="123456789"
/>

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.