[Angular] Using directive to create a simple Credit card validator
We will use 'HostListener' and 'HostBinding' to accomplish the task.
The HTML:
<label> Credit Card Number <input name="credit-card" type="text" credit-card placeholder="Enter your 16-digit card number"> </label>
Create directive:
import { Directive, ElementRef, HostListener, HostBinding } from '@angular/core'; @Directive({ selector: '[credit-card]' }) export class CreditCardDirective { constructor(private element: ElementRef) {} }
Add a HostListener when user type input:
And we want that the max length of string user type is 16 and it should be formatted as '6666 6666 6666 6666'.
@HostListener('input', ['$event']) onKeyDown(event: KeyboardEvent) { this.border = ""; const input = event.target as HTMLInputElement; // the length should be no more than 16 let trimmed = input.value.replace(/\s+/g, ''); if(trimmed.length > 16) { trimmed = trimmed.substr(0, 16); } // should be 6666 6666 6666 6666 let numbers = []; for(let i = 0; i < trimmed.length; i +=4) { numbers.push(trimmed.substr(i, 4)); } input.value = numbers.join(' '); }
Now we want to use @HostBinding to change style props when what user entered is not a number:
onKeyDown(event: KeyboardEvent) { this.border = ""; const input = event.target as HTMLInputElement; // the length should be no more than 16 let trimmed = input.value.replace(/\s+/g, ''); if(trimmed.length > 16) { trimmed = trimmed.substr(0, 16); } // if we pass in char, show red border if((/[^\d]/g).test(trimmed)) { this.border = '1px solid red'; } // should be 6666 6666 6666 6666 let numbers = []; for(let i = 0; i < trimmed.length; i +=4) { numbers.push(trimmed.substr(i, 4)); } input.value = numbers.join(' '); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-03-08 [RxJS] Reactive Programming - New requests from refresh clicks -- merge()
2016-03-08 [RxJS] Starting a Stream with SwitchMap & switchMapTo
2016-03-08 [RxJS] Reactive Programming - Rendering on the DOM with RxJS
2016-03-08 [RxJS] Reactive Programming - Why choose RxJS?