[大家好,我是JavaScript新手,我有一个问题。我有validator.js文件,可在其中验证电子邮件,密码和请求。这是
/**
* Simple regex validator for email
* @param email The email
* @returns {boolean} Whether the email matches the regex
*/
function email(email) {
const regExp = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return regExp.test(email);
}
/**
* Simple regex validator for password
* @param password The password
* @returns {boolean} Whether the password matches the regex
*/
function password(password) {
const regExp = /^(?=.*\d).{7,15}$/;
return regExp.test(password);
}
const request = {
email: {
message: '',
validate: function (req) {
const email = req.body.email;
if(!email){
email.message = 'Email is required';
return false;
}
if(!validator(email(email))){
email.message = 'Email is not valid';
return false;
}
return true;
}
}
};
module.exports = {
email,
password,
request
};
我想在电子邮件的验证功能中使用email(email)函数,但是阴影可变,如何实现?
您不能直接访问阴影变量。除非您对此值有其他处理,否则不会。
最好的解决方案就是不要遮挡。
或者,更改您的电子邮件地址变量的名称:
const emailAddress = req.body.email;
或更改电子邮件验证功能的名称:
function validateEmail(email) {
或更妙的是,为清楚起见,请同时做这两项。
这就是我所说的“其他句柄”。
function email(email) { /* ... */ }
function password(password) { /* ... */ }
const validators = { email, password }
function doStuff() {
const email = req.body.email;
validators.email(email)
}
在这种情况下,我们已经遮盖了局部变量email
,但是我们已经将email函数分配给了另一个我们仍然可以访问的对象。
但是,总的来说,阴影是不好的,应该尽最大努力避免它。