我有一个具有不同验证功能的验证类。现在我要做的是在另一个文件中制作一个对象,并使用构造函数发送所有验证数据。此构造函数将接收一个看起来像"规则[is_empty:value]的对象"。在此左侧部分是函数名称,值是从输入字段获取的值。现在如何称呼该函数并将值发送为参数。当有多个函数有多个参数时,我该怎么办。
我已经尝试使用地图方法和拆分方法,但无法访问该功能。
class Validator {
constructor(rules) {
let rule_obj = {}
// rules[is_empty:value,has_valid_min_length:2;3]
}
/**this is to check if the field has an empty value or not */
is_empty = (value) => {
if (value == '' || value == null) {
return true
}
else {
return false
}
}
/**this is to check if value has required minimum length or not */
has_valid_min_length = (value, min_length = 0) => {
if (this.is_empty(value)) {
return false
}
if (value.length < min_length) {
return false
}
else {
return true
}
}
/**this is to check if value has more characters than maximum length */
has_valid_max_length = (value, max_length = 0) => {
if (this.is_empty(value)) {
return false
}
if (value.length > max_length) {
return false
}
else {
return true
}
}
//this is to check if selected date is less than given limit
is_before_min_date = (value_date, min_date) => {
if (this.is_empty(value)) {
return false
}
if (value_date < min_date) {
return true
}
else { return false }
}
//this is to check if selected date is higher than given limit
is_after_max_date = (value_date, max_date) => {
if (this.is_empty(value)) {
return false
}
if (value_date > max_date) {
return true
}
else {
return false
}
}
}
我想调用":"数组中签名之前的函数,并给出该函数参数,该函数在':'。
的右侧具有值。请帮助。
您可以通过构造函数发送对象...
x = {
"is_empty": [0, 2, 2],
"has_valid_min_length": [ [value, min_length], [value, min_length] ],
"has_valid_max_length": [ [value, max_length], [value, max_length] ],
"is_before_min_date": [ [value_date, min_date], [value_date, min_date] ],
"is_after_max_date": [ [value_date, max_date], [value_date, max_date] ]
}
然后在构造函数中,通过对象设置一个循环和值数组...
constructor(to_be_validated) {
let validator_names = Object.keys(to_be_validated);
for (let validator of validator_names) {
let values = to_be_validated[validator];
if (validator === "is_empty") {
for (let value of values) {
this.is_empty(value);
}
} else if (validator === "has_valid_min_length") {
for (let value of values) {
this.has_valid_min_length(value[0], value[1]);
}
} etc...
}
}
,然后调用该函数时,方法应执行
let my_validator = new Validator(x);
我回应了上面的评论。想要
的方法和特定语法let my_validator = new Validator(rules[validator_name:values]);
所有这样的干净线都有点不合时宜。我从未见过那样做。
您可能需要按规则调用所有检查功能的其他功能。
class Validator {
constructor(rules) {
this.rules = rules;
// rules={is_empty:[],has_valid_min_length:[2]};
}
validate = (value) => {
let pass = true;
Object.keys(this.rules).forEach(k=>pass = pass && this[k](value, ...this.rules[k]));
return pass;
}
...
}
rules
-objects具有键值对,其中键是单个检查的函数名称,值是将通过的参数数组。此数组可以具有零或更多条目。
编辑: forEach
将在所有密钥上迭代。每次k
都会容纳当前密钥。pass
是一个布尔值,可收集您的Checker-intrunctions的所有返回值。(true && false === false
(如果任何支票返回false,最终的返回值将是错误的。
然后,您将这些规则应用于这样的数据: myValidatorObj.validate(data);