我试图找到信息,如果有任何内置验证器,检查输入是否为正数?
我试图构建以下内容:
static nonZero(control:Control) {
if (Number(control.value) < 0) {
control.setErrors({nonZero: true})
} else {
control.setErrors(null)
}
}
但是,我不知道如何在我的表单构建器中使用它:
this.form = _formBuilder.group({
field:['', Validators.required]})
我做错了什么?
答案 0 :(得分:4)
您可以通过利用Validators.compose
方法以这种方式进行配置:
this.form = _formBuilder.group({
field:['', Validators.compose([
Validators.required, nonZero ])
]});
这允许您为该字段定义两个同步验证器。
修改强>
我会以这种方式实现验证器:
static nonZero(control:Control):{ [key: string]: any; } {
if (Number(control.value) < 0) {
return {nonZero: true};
} else {
return null;
}
}
答案 1 :(得分:3)
很少重构:
export function positiveNumberValidator(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
const isNotOk = Number(control.value) < 0;
return isNotOk ? { nonPositive: { value: control.value } } : null;
};
}
如果您想在模板中将其用作Directive
:
import { Directive, Input } from '@angular/core';
import { ValidatorFn, AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';
@Directive({
selector: '[prePositiveNumber]',
providers: [{ provide: NG_VALIDATORS, useExisting: PositiveNumberDirective, multi: true }]
})
export class PositiveNumberDirective implements Validator {
validate(c: AbstractControl): { [key: string]: any; } {
return positiveNumberValidator()(c);
}
}
export function positiveNumberValidator(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
const isNotOk = Number(control.value) < 0;
return isNotOk ? { nonPositive: { value: control.value } } : null;
};
}
<强>模板:强>
<input type="number"
class="full"
name="shipmentVolume"
required
prePositiveNumber
[(ngModel)]="someModel" />
使用Reactive forms
时,您可以compose
验证者,但也可以在没有compose
的情况下使用:
this.form = _formBuilder.group({
field:['', Validators.required, positiveNumberValidator()] });
答案 2 :(得分:0)
我使用相同的撰写方法,但实现了一个min函数,你也可以传递1。
import { ValidatorFn, AbstractControl } from '@angular/forms';
export function min(min: Number): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} => {
const input = control.value,
isValid = input < min;
if(isValid)
return { 'minValue': {min} }
else
return null;
};
}
this.pnFG = this.fb.group({
pageNumberInput: [this.pageNumber,
Validators.compose([
Validators.required,
min(1)
])
]
});
答案 3 :(得分:0)
您可以结合使用min Validator和正则表达式模式Validator:
field: ['', [Validators.required, Validators.min(1), Validators.pattern('^(0|[1-9][0-9]*)$')]],
答案 4 :(得分:0)
您可以做类似的事情,
.js
orderFormGroup = new FormGroup({
weight: new FormControl('', [Validators.required, Validators.min(0)])
});
这将允许小于和等于的零值,如果您想要大于零的值,则可以提及Validators.min(0.1)
.html
<input type="number" step="0.1" name="orderWeight" formControlName="weight" max="35" min="0" class="clr-input form-control">
请注意,min="0"
仅可确保前端的增加或减少不会超过0。实际的输入验证是在.js中处理的
答案 5 :(得分:0)
您还可以将内置验证器min与Number.MIN_VALUE结合使用以接受每个正值。
例如:
this.form = _formBuilder.group({
field:['', [Validators.required, Validators.min(Number.MIN_VALUE)]]
});
答案 6 :(得分:-1)
wrapper.java.command=java
wrapper.java.command.loglevel=INFO
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=/opt/Final/lib/MyApp.jar
wrapper.java.library.path.1=../lib
wrapper.logfile=../logs/wrapper.log
wrapper.app.parameter.1=/opt/Final/lib/MyApp.jar
wrapper.app.parameter.2=-c
wrapper.app.parameter.3=/opt/Final/lib/conf
这很容易!