Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度验证器检查输入是否为数字_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 角度验证器检查输入是否为数字

Javascript 角度验证器检查输入是否为数字,javascript,angular,typescript,Javascript,Angular,Typescript,我试图在Angular 9中执行表单验证,以检查某个输入的值是整数还是小数 因此,我创建了以下自定义验证器: 从'@angular/forms'导入{AbstractControl,ValidationErrors}; 导出类编号器{ 静态数字控件:AbstractControl:ValidationErrors | null{ 如果typeof+control.value==number,则返回null; 返回{notANumber:该值不是数字}; }; } 首先,问题在于JavaScri

我试图在Angular 9中执行表单验证,以检查某个输入的值是整数还是小数

因此,我创建了以下自定义验证器:

从'@angular/forms'导入{AbstractControl,ValidationErrors}; 导出类编号器{ 静态数字控件:AbstractControl:ValidationErrors | null{ 如果typeof+control.value==number,则返回null; 返回{notANumber:该值不是数字}; };
} 首先,问题在于JavaScript将NaN的类型返回为number。因此,如果输入也不等于NaN,则可以添加额外的检查

首先,问题在于JavaScript将NaN的类型返回为number。因此,如果输入也不等于NaN,则可以添加额外的检查

+将变量转换为数字+控制值

因此,在您的示例中,将control.value转换为数字,然后检查此变量是否为数字。这样,它将始终是一个数字

您需要检查:

if Number(control.value) == NaN 
// returns true if control.value is string
// else returns parsed number

+将变量转换为number+control.value

因此,在您的示例中,将control.value转换为数字,然后检查此变量是否为数字。这样,它将始终是一个数字

您需要检查:

if Number(control.value) == NaN 
// returns true if control.value is string
// else returns parsed number

如果用户更改输入中的值,该值将变成类似123的字符串。 这是一个字符串,但在您的情况下,它应该是有效的。所以你必须检查这是否是可分析的

更好:您可以将输入类型从文本设置为数字

<input type="number" ...
那么它总是一个数字。
此外:您可以将内置验证器设置为最小值和最大值:

如果用户更改输入中的值,该值将变成类似123的字符串。 这是一个字符串,但在您的情况下,它应该是有效的。所以你必须检查这是否是可分析的

更好:您可以将输入类型从文本设置为数字

<input type="number" ...
那么它总是一个数字。
此外:您可以将内置验证器的最小值设置为最大值:

+将字符串设置为NaN,并将其删除。或者,如果你必须再检查一个加号,那么

 if (typeof +control.value === "number" && !isNaN(+control.value)) return null;

+将字符串设为NaN,该数字的类型是删除它。或者,如果你必须再检查一个加号,那么

 if (typeof +control.value === "number" && !isNaN(+control.value)) return null;

缺点是您不能使用type=number,您需要在输入上使用type=text,但是。但以下是我作为验证器fn的解决方案:

function notANumber(): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} | null => {
    const value = control.value
    let nV = value
    if (typeof value == 'string') {
      nV = value.replace(',', '.')
    }
    return (Number.isNaN(Number(nV)) && !control.pristine) ? {notANumber: true} : null;
  };
}

缺点是您不能使用type=number,您需要在输入上使用type=text,但是。但以下是我作为验证器fn的解决方案:

function notANumber(): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} | null => {
    const value = control.value
    let nV = value
    if (typeof value == 'string') {
      nV = value.replace(',', '.')
    }
    return (Number.isNaN(Number(nV)) && !control.pristine) ? {notANumber: true} : null;
  };
}

+将字符串设为NaN哪种类型的是数字删除它+将字符串设为NaN哪种类型的是数字删除它