在输入字段中接受特殊字符.我正在使用该字段存储序列号. 序列号是字母数字

<ion-input [(ngModel)]="serial_number" (ngModelChange)="validation($event)" #serialno  id="serialno"  class="cac-input"></ion-input>
  validation(event) {
    const inputElement = document.getElementById('serialno') as HTMLInputElement;
    const pattern = /^[a-zA-Z0-9]*$/;
    console.log(event)
    console.log(pattern.test(event))
    let c = event.replace(/[^a-zA-Z0-9 ]/g, '');
    inputElement.value = '';
    inputElement.value = c;
    console.log(c)
    this.serial_number = c;
  }

我以前使用正则表达式来删除特殊字符...但在删除之后,值也显示在输入字段中...

我需要禁止输入字段中输入特殊字符.

在浏览器中,使用(按键)事件工作正常...但在Android中(按键)事件不工作

In app the field shows

consoling the ngmodel field shows

推荐答案

我们可以为此编写一个验证器,它接受一个输入正则表达式,它验证有效和无效的字符,然后我们用空字符串替换不需要的字符,我们还需要查找粘贴事件,如果粘贴了无效字符,它们也需要清除,这一切都可以使用事件keydownpaste@HostListener属性来完成!

指令

import { Directive, ElementRef, HostListener, Input } from '@angular/core';

@Directive({
  selector: '[appPattern]',
})
export class PatternDirective {
  @Input() appPattern: string = '[A-Za-z0-9]';

  @HostListener('keyup', ['$event']) public onKeydown(event: any) {
    const value: string = event.target.value;
    if (!value) {
      return true;
    }
    const regExpr = new RegExp(`^(${this.appPattern})+$`);
    if (!regExpr.test(value)) {
      event.target.value = value.replace(
        new RegExp(`(${this.appPattern})|.*`, 'gm'),
        '$1'
      );
      event.preventDefault();
      return false;
    }
  }

  @HostListener('paste', ['$event']) public onPaste(event: any) {
    event.preventDefault();
    let clipboardText = event.clipboardData.getData('text');
    event.target.value = clipboardText.replace(
      new RegExp(`(${this.appPattern})|.*`, 'gm'),
      '$1'
    );
  }
  constructor(private elementRef: ElementRef) {}
}

HTML

 <ion-input
    type="text"
    [(ngModel)]="todo.title1"
    name="title1"
    appPattern="[A-Za-z0-9]"
  ></ion-input>

Stackblitz Demo

Javascript相关问答推荐

如何在使用fast-xml-parser构建ML时包括属性值?

我在这个黑暗模式按钮上做错了什么?

使用续集和下拉栏显示模型属性

无法在nextjs应用程序中通过id从mongoDB删除'

为什么ngModel不能在最后一个版本的Angular 17上工作?'

在服务器上放置了Create Reaction App Build之后的空白页面

MathJax可以导入本地HTML文档使用的JS文件吗?

如何从调整大小/zoom 的SVG路径定义新的d属性?""

如何解决useState错误—setSelect Image不是函数''

未定义引用错误:未定义&Quot;而不是&Quot;ReferenceError:在初始化&Quot;之前无法访问';a';

本地库中的chartjs-4.4.2和chartjs-plugin-注解

将Node.js包发布到GitHub包-错误ENEEDAUTH

在开发期间,Web浏览器如何运行&qot;.jsx&qot;文件?

为什么JPG图像不能在VITE中导入以进行react ?

Reaction-SWR-无更新组件

打字脚本中方括号符号属性访问和拾取实用程序的区别

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

在Reaction Native中,ScrolltoIndex在结束时不一致地返回到索引0

如何动态呈现适合未知屏幕大小的最大数量的表行?苗条的