Spesso si ha la necessità di limitare i caratteri consentiti all'interno degli input nei nostri form. Il metodo di gestione più utilizzato prevede l'utilizzo dei validatori. Questi, essendo parte del sistema di validazione, consentono di gestire lo stato della form e conoscere, in un dato momento, se la form è compilata correttamente.
E se, invece di validare l'input, volessimo anche bloccare il possibile inserimento errato al momento della scrittura? Facciamone un esempio pratico: nel nome di una persona sono consentiti solo caratteri alfabetici. Utilizzando i validatori posso presentare un messaggio di errore nel caso in cui trovi un carattere vietato, ma in questo script vedremo come riuscire a intercettare l'immissione del carattere e gestirla in modo che l'input risulti sempre coerente con le validazioni.
Per poter utilizzare le funzionalità a basso livello, come gli eventi di input, abbiamo necessità di utilizzare il linguaggio JavaScript e, nel framework Angular, il posto perfetto per il nostro codice è una direttiva.
Costruiamo una direttiva in grado di gestire sia il keypress, che il paste, all'interno dell'input, e di validare il contenuto tramite una regex.
@Directive({
selector: '[specialCharacter]'
})
export class SpecialCharacterDirective {
/**
* stesso nome del selettore per consentirne il set
* accetta caratteri alfanumerici di default
*/
@Input()
specialCharacter = '^[a-zA-Z0-9]*$';
constructor(private el: ElementRef) { }
@HostListener('keypress', ['$event']) onKeyPress(event) {
return new RegExp(this.specialCharacter).test(event.key);
}
@HostListener('paste', ['$event']) blockPaste(event: KeyboardEvent) {
this.validateFields(event);
}
validateFields(event) {
setTimeout(() => {
this.el.nativeElement.value = this.el.nativeElement.value.replace(/[^A-Za-z ]/g, '').replace(/\s/g, '');
event.preventDefault();
}, 100)
}
}Una volta importata nel modulo, possiamo utilizzare questa direttiva all'interno delle nostre form.
<!-- nome --> <input specialCharacter formControlName="name"/> <!-- email con override della validazione --> <input [specialCharacter]="myEmailRegex" formControlName="email"/>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i generics di C# con la clausola nameof in modo semplificato
Gestione delle issue type con GitHub
Ciclo di vita risorse con .NET Aspire
DevSecOps per .NET: dalla teoria alla pratica
Le cron expression di un workflow di GitHub
Analizzare il contenuto di una issue con GitHub Models e AI
Referenziare un package NuGet in una file based app .NET
Impostare automaticamente l'altezza del font tramite CSS
Come automatizzare il download dei report di billing da GitHub Enterprise
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Eseguire i pre-commit hook di git con dependabot
Effettuare la ricerca di testo nascosto in una pagina web con Javascript
I più letti di oggi
- Future Dev Day - Milano
- Global Azure 2026 - ASPItalia.com - Milano
- Gestire il ciclo di vita di AbortController in Javascript
- Meno password, meno segreti, meno rischio. Al Global Azure 2026 di ASPItalia.com, Stefano Mostarda parlerà di Azure Managed Identity e di come adottare un approccio zero credentials per far comunicare in modo sicuro i servizi cloud, senza gestire credenziali nel codice o nelle pipeline. È uno dei pattern raccomandati da Microsoft per ridurre il carico operativo e migliorare la sicurezza. Milano, 16 aprile 2026. #GlobalAzure #Azure #ManagedIdentity #Security #ASPItalia https://aspit.co/globalazure-26




