【问题标题】:Directive to validate input textbox to allow only numbers, a negative sign and a decimal value验证输入文本框以仅允许数字、负号和十进制值的指令
【发布时间】:2017-04-25 18:31:58
【问题描述】:

我正在尝试验证“文本”类型的输入文本框,以仅允许数字或带有负数或小数的数字。 示例:100、002、-3.4、-6、8.5 目前的代码是没有验证“-”或“。”的代码。

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
  selector: '[myValidate]'
})
export class HighlightDirective {
  constructor(private el: ElementRef) { }
  @Input('myValidate') highlightColor: string;
  @HostListener('keyup', ['$event']) onKeyDown(event) {
    let oldValue = event.target.value;
    let keyPressed = event.key;
    let keyCode = event.keyCode;
    if (isNaN(oldValue.substr(oldValue.length - 1)) || keyCode === 32) {
      this.el.nativeElement.value = oldValue.substr(0, oldValue.length - 1);
    } else {
      return null;
    }
  }
}

【问题讨论】:

    标签: angular typescript angular-directive


    【解决方案1】:

    您可能正在寻找 JavaScript 的 parseFloat() function

    parseFloat('123')
    123
    parseFloat('1.23')
    1.23
    parseFloat('-1.23')
    -1.23
    parseFloat('abc')
    NaN
    parseFloat('0002')
    2
    parseFloat('000123')
    123
    

    【讨论】:

    • 嗨,克里斯托弗。感谢您的回复。如果我在文本框中输入了“1000”并且我想将其更改为“2000”。因此,如果我选择“1”并稍后将其删除,则愿意输入“2”以将值设为“2000”。在删除“1”之前,parseFloat() 会解析文本框中剩余的“000”并返回“0”。所以我必须再次输入整个'2000'。关于此的任何建议
    • 将用户输入替换为“有效”替换不是最佳做法。相反,让用户输入保持原样,并在输入框附近显示一条错误消息,指示输入无效
    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多