目前我有這個:
const checkText = (t) => ({
isNotEmpty: function () {
if (t.length === 0) {
throw new Error("isNotEmpty false");
}
return this;
},
isEmail: function () {
const emailRegex = /^\w ([\.-]?\w )*@\w ([\.-]?\w )*(\.\w{1,20}) $/;
if (!emailRegex.test(t)) {
throw new Error("isEmail false");
}
return this;
}
};
使用 try catch,如果文本無效,則會拋出錯誤并以這種方式處理:
const isFieldValid = (email) => {
try {
const v = checkText(email)
.isNotEmpty()
.isEmail();
if (v) {
return true;
}
} catch (error) {
return false;
}
};
目標是縮短和清理代碼,避免 try catch,在一行中進行最終呼叫,如下所示:
const isFieldValid = checkText('valid text').isNotEmpty().isEmail(); // one line
PS:我知道那里有圖書館可供驗證。代碼是一個例子。
uj5u.com熱心網友回復:
class CheckText {
constructor(t) {
this.t = t;
this.valid = true;
}
isNotEmpty() {
this.valid &&= this.t.length>0;
return this;
}
isEmail() {
this.valid &&= CheckText.emailRegex.test(this.t);
return this;
}
static emailRegex = /^\w ([\.-]?\w )*@\w ([\.-]?\w )*(\.\w{1,20}) $/;
}
const isFieldValid = new CheckText('[email protected]').isNotEmpty().isEmail().valid;
console.log(isFieldValid);
但是,我更喜歡這樣做:
const emailRegex = /^\w ([\.-]?\w )*@\w ([\.-]?\w )*(\.\w{1,20}) $/;
const isNotEmpty = t => t.length>0;
const isEmail = t => emailRegex.test(t);
const validate = (t, validators) => validators.every(v=>v(t));
console.log(validate('[email protected]', [isNotEmpty, isEmail]));
console.log(validate('testexample.com', [isNotEmpty, isEmail]));
console.log(validate('', [isNotEmpty, isEmail]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/531974.html
