基本上,我是Angular和Java脚本的初学者。这里试图在某些条件下验证“反应形式文本”字段。
条件是:
Asterisk()从第5位到第13位作为输入,在Asterisk()之后,其他所有内容均视为无效。 例如:8500 * 001001…(无效)8500 *(有效)
我知道可以编写简单的自定义验证。如果有任何想法,请帮助我,或者您也可以建议我。提前致谢。
答案 0 :(得分:0)
如果您知道可以使用Validators.pattern
的正则表达式模式,则可能有多种方法,我建议编写自定义验证器比复杂的正则表达式模式更易于维护和可读。提供有关值验证的自定义错误消息,另一件事自定义验证器只是一个函数,如果验证失败,则该函数返回一个对象;如果验证成功,则返回null。
自定义反应形式验证器
import { AbstractControl, ValidationErrors } from "@angular/forms"
export const inputTextValidator = function inputTextValidator(control: AbstractControl): ValidationErrors | null {
let getErrorObject = function (message): ValidationErrors {
return {
inputText: true,
message // provide custom error message related to the validation role
}
}
let value: string = control.value || '';
// check if value length between specific range like 7-25
if (value.length < 7 && value.length < 25) {
return getErrorObject(`text length must be between 7-25 ,current length ${value.length}`);
}
// check if value invalid characters like #$%^%$^/-+
let validCharacters = /^[a-zA-Z0-9\*]+$/g
if (validCharacters.test(value) === false) {
return getErrorObject(`text has invalid characters,current value ${value.length}`);
}
let asterisk = /^\w+\*?$/g
if (asterisk.test(value) === false) {
return getErrorObject(`only one asterisk at the end of the string is valid,current value ${value.length}`);
}
// check the asterisk postion at 8th-13th
let indexOfAsterisk: number = value.indexOf('*'); // index base on 0
if (indexOfAsterisk >= 0 && (indexOfAsterisk < 8 || indexOfAsterisk > 12)) {
return getErrorObject(`asterisk must bee in postion at 8 -13 th,current * postion ${indexOfAsterisk}`);
}
return null;
}
在您的示例中未显示的是从5号开始的星号有效位置,这将中断关于值的最小长度的第一个角色,为什么我要确保最小长度为8