Есть много подходов к этой проблеме.Все предоставленные решения должны работать.Моя рекомендация - Подход 2.
Подход 1
Вы можете попытаться удалить нечисловые символы в событии ввода, как это
<input
formControlName="userid"
type="text"
placeholder="Numbers"
oninput="javascript: this.value = this.value.replace(new RegExp('[^0-9]', 'gm'), '')"
pInputText
/>
Модифицированная демоверсия
Я проверил это в Firefox и Chrome на MacOS, и, похоже, он работает нормально.
Подход 2
Ксделайте это из своего углового модуля:
Используйте простой текстовый ввод
<input
formControlName="userid"
type="text"
placeholder="Number"
pInputText
/>
Прослушайте изменения и исправьте значение соответствующим образом.Не забудьте зарегистрировать своих наблюдателей на init.
registerChangeObservers() {
this.registrationFormGroup.get("userid").valueChanges.subscribe(val => {
this.registrationFormGroup.patchValue({
'userid': val.replace(new RegExp('[^0-9]', 'gm'), '')
}, { emitEvent: false });
});
}
ngOnInit() {
this.registerChangeObservers();
}
Особенно обратите внимание на часть { emitEvent: false }
.Вы должны установить это, чтобы избежать рекурсии.Этот подход может потерпеть неудачу, если ваша модель станет недействительной и, следовательно, ее значение изменится на ноль.Например, это может произойти, если вы установите тип ввода на число, но пользователю удастся ввести нецифровый символ.Чтобы избежать этого, убедитесь, что проверка ввода не завершается ошибкой для специальных символов, например, путем установки типа ввода для текста.
Демонстрация здесь
Подход 3
Чтобы избежать отображения изменяющихся символов, вы также можете прослушивать входные события (например, нажатия клавиш) вместо фактических изменений значений.Это эквивалентно подходу 1. Для этого используйте этот вход
<input
formControlName="userid"
type="text"
placeholder="Number"
pInputText
(input)="onPress($event)"
/>
и добавьте эту функцию в свой контроллер
onPress($event) {
this.registrationFormGroup.patchValue({
'userid': $event.target.value.replace(new RegExp('[^0-9]', 'gm'), '')
}, { emitEvent: false });
}
Демонстрация 3
Примечание: я бы вообще избегал такого подхода, потому что по моему опыту подавление изменения символов может иметь непреднамеренные побочные эффекты с некоторыми необычными методами ввода, особенно на мобильных устройствах.Подход выше (Подход 2) также работает и безопаснее на мой взгляд.Несмотря на то, что отображаются модифицирующие символы, они исчезнут при следующем действии пользователя и никогда не будут присутствовать в данных модели.