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
Validare i dati di una colonna JSON in SQL Server
Modificare lo stile in una QuickGrid Blazor
Proteggere l'endpoint dell'agente A2A delle Logic App
Agentic Workflows in GitHub
Configurare OpenTelemetry per Application Insights su ASP.NET Core
Eseguire i pre-commit hook di git con dependabot
Filtrare i dati in ASP.NET Core usando OpenTelemetry su Azure Monitor
Self-healing degli unit test con Copilot in GitHub
Keynote .NET Conference Italia 2025
Blazor e InputHidden in .NET 10
Utilizzare i named query filter di Entity Framework
Dallo sviluppo locale ad Azure con .NET Aspire
I più letti di oggi
- Microsoft rilascia Silverlight 1.0 beta e 1.1 alpha
- Gestire ed intercettare le eccezioni con i controlli SqlDataSource
- Questionario sulla qualità di VS 2005
- Impersonare un utente fittizio per un'applicazione ASP.NET Core
- Intercettare gli errori in pagine ASP.NET con il global.asax
- maggiori informazioni su #VS Live Share e la form per iscriversi alla preview sono disponibili qui https://aspit.co/bjv #MSFTConnect
- Creare un'applicazione che utilizza SCSS invece dei CSS tramite Angular-CLI
- Routing basato su attributi per ASP.NET MVC e ASP.NET Web API
- Microsoft ha confermato oggi a #WPC13 che #win81 sarà in RTM a fine agosto per gli OEM.


