首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RegEx删除Mat-Input中的WhiteSpace和特殊字符

如何使用RegEx删除Mat-Input中的WhiteSpace和特殊字符
EN

Stack Overflow用户
提问于 2019-01-15 21:32:49
回答 1查看 2.6K关注 0票数 1

我有一个表单,我想在angular中放一个验证,如果用户输入任何特殊字符,那么它应该显示错误。该表单有两个字段Name和Description。在name字段中,我希望使用regex进行验证,即用户不能输入除字母数字字符以外的任何字符。

HTML代码:

代码语言:javascript
复制
 <form (ngSubmit)="(submit)" #formControl="ngForm">
                    <div class="form">
                        <mat-form-field color="accent">
                            <input
                                matInput
                                #input
                                class="form-control"
                                placeholder="name"
                                [(ngModel)]="data.projectName"
                                name="name"
                                (ngModelChange)="noWhiteSpaceOnChange()"
                                required
                                minlength="4"
                            />

                            <mat-error *ngIf="formControl.invalid">{{
                                getErrorMessage()
                            }}</mat-error>
                        </mat-form-field>
                    </div>
                   </form>

TypeScript代码:-

代码语言:javascript
复制
 noWhiteSpaceOnChange() {
    const validationRegex = /^((?!\s{1,}).)*$/
    if (!validationRegex.test(this.data.projectName)) {
       // this.data.projectName= '';
      let str = this.data.projectName;
      str = str.replace(/[^A-Z0-9]+/ig, "_");
      this.data.projectName=str;

    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-16 17:53:42

在寻找答案时从stackoverflow获得了代码。

我创建了一个新文件,粘贴了以下代码,并在app.moule.ts声明中添加了指令。

代码语言:javascript
复制
import { Directive, HostListener, ElementRef, Input } from '@angular/core';
@Directive({
selector: '[specialIsAlphaNumeric]'
})
export class SpecialCharacterDirective {

regexStr = '^[a-zA-Z0-9_]*$';
@Input() isAlphaNumeric: boolean;

constructor(private el: ElementRef) { }


@HostListener('keypress', ['$event']) onKeyPress(event) {
return new RegExp(this.regexStr).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)
}

}

然后在mat-input中我使用了声明specialIsAlphaNumeric

代码语言:javascript
复制
<mat-form-field color="accent">
                            <input
                                matInput specialIsAlphaNumeric
                                class="form-control"
                                placeholder="name"
                                [(ngModel)]="data.projectName"
                                name="name"
                                required
                                minlength="4"
                            />

                            <mat-error *ngIf="formControl.invalid">{{
                                getErrorMessage()
                            }}</mat-error>
                        </mat-form-field>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54199905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档