【问题标题】:angular 8 accept number only custom directive working in desktop browsers.but not working in mobile chrome browserangular 8 只接受数字自定义指令在桌面浏览器中工作。但在移动 chrome 浏览器中不工作
【发布时间】:2020-11-30 07:25:18
【问题描述】:

我创建了一个自定义指令来只接受数字。它在桌面浏览器和 safari 移动版本中运行良好。但在移动 chrome 版本中无法运行。

任何人都可以在这个问题上帮助我。在此先感谢

这是我的 HTML 和指令

  <input NumbersOnly  placeholder="{{ 'PlaceHolder.MobileNo' | translate }}" formControlName="mobileNo"  maxlength="7" >
import { Directive, ElementRef, HostListener, Input } from "@angular/core";
@Directive({
  selector: "[NumbersOnly]",
})
export class NumbersDirective {
  // Allow decimal numbers and negative values
  private regex: RegExp = new RegExp(/^-?[0-9]+(\[0-9]*){0,1}$/g);
  // Allow key codes for special events. Reflect :
  // Backspace, tab, end, home
  private specialKeys: Array<string> = ["Backspace", "Tab", "End", "Home", "-"];
  constructor(private el: ElementRef) {}
  @HostListener("keydown", ["$event"])
  onKeyDown(event: KeyboardEvent) {
    // Allow Backspace, tab, end, and home keys
    if (this.specialKeys.indexOf(event.key) !== -1) {
      return;
    }
    if (event.key.match(this.regex) == null) {
      event.preventDefault();
      return false;
    }
  }
}

【问题讨论】:

  • 不工作意味着什么?它也接受字符?
  • 是的,在移动 chrome 浏览器中它接受字符。但在桌面上,这个指令工作正常

标签: regex angular8 angular2-directives mobile-chrome


【解决方案1】:

我看到您在正则表达式中遗漏了一个点。您不需要 g 修饰符,因为整个字符串必须匹配。

使用

private regex: RegExp = /^-?[0-9]+(?:\.[0-9]*)?$/;

【讨论】:

  • 正则表达式很好。但是发生的情况是 event.preventdefault() 在移动 chrome 浏览器中不起作用
  • @streeker 好的,但这与正则表达式无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 2011-12-28
  • 2017-10-24
  • 2014-01-10
  • 2013-05-06
相关资源
最近更新 更多