-3

When the user enters a comma in the INPUT, I would like the comma to be automatically transformed in a dot. Is it possible?

<label>Number </label>
<input type="number" maxlength="5" />

Here is a reproduction -> Link

Menier
  • 31
  • 4

3 Answers3

0

Using Angular Form Controls will automatically convert it to a correct number :

https://stackblitz.com/edit/angular-ivy-uewxfs?file=src%2Fapp%2Fapp.component.html,src%2Fapp%2Fapp.component.ts

0

<input> elements of type number are used to let the user enter a number. They include built-in validation to reject non-numerical entries.

The user cann't input comma in the INPUT, so first you have to change input type as text. after that on onkeyup event you can replace the value like below:

<input type="text" onkeyup="this.value=this.value.replace(/,/g, '.');"/>

https://stackblitz.com/edit/angular-ivy-hc3mn8?file=src/app/app.component.html

MD. RAKIB HASAN
  • 3,670
  • 4
  • 22
  • 35
0

You can make something like this old SO about mask

Create a directive

@Directive({
  selector: '[notdot]'
})
export class NotDotDirective {

  constructor(@Optional() @Host()private control:NgControl) {}
  @HostListener('input', ['$event'])
  change($event) {

    const item = $event.target
    const value = item.value;
    const pos = item.selectionStart; //get the position of the cursor

    const matchValue = value.replace(/,/g, '.')
    if (matchValue!=value)
    {
      if (this.control)
        this.control.control.setValue(matchValue, { emit: false });

      item.value = matchValue;
      item.selectionStart = item.selectionEnd = pos; //recover the position
    }
  }
}

And use like

<input notdot maxlength="5"/>

NOTE You can use also with template driven forms or with ReactiveForms

<input notdot [(ngModel)]="variable" maxlength="5"/>

<input notdot [formControl]="control" maxlength="5"/>

You can see in this stackblitz

Eliseo
  • 50,109
  • 4
  • 29
  • 67