我有5个函数可以检查用户对正则表达式的输入......这些正则表达式已被抽象出来并按previous post中的建议放在这里。
现在我想要抽象出功能,并将代码放入上一篇文章的关联数组中......然而,他们似乎对这是否是最佳实践存在争议?这是O.K吗?
将这些函数放入一个关联的函数数组中是一种好习惯吗?上一篇文章没有这么做......我猜他们决定反对它。
但基本上如何正确地将类似方法组合在一起。
EDIT 1: // consolidated regular expressions
var patterns = {
name: /^[a-zA-Z-\s]{1,20}$/,
email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,4}$/,
pass: /.{6,40}/,
url: /^[-\w&:\/\.=\?,#+]{1,}$/,
aml: /<(.+)_([a-z]){1}>$/
};
// checks full name which allows characters and dashes
function check_name(text,id,res)
{
for(var d=0;d<=0;d++)
{
if(!patterns["name"].exec(text.value))
{
o2(id,res);
return 0;
}
}
return 1;
}
// checks for valid email form
function check_email(text,id,res)
{
if(!patterns["email"].exec(text.value))
{
o2(id,res);
return 0;
}
return 1;
}
// checks for password length
function check_pass(text,id,res)
{
if(!patterns["pass"];.exec(text.value))
{
o2(id,res);
return 0;
}
return 1;
}
// checks for valid url form
function check_url(text,id,res)
{
if(!patterns["url"].exec(text.value))
{
o2(id,res);
return 0;
}
return 1;
}
// checks for aml form
function check_aml(text)
{
if(a=patterns["aml"].exec(text))
{
if(a[2]=='p')
{
return 0;
}
else if (a[2]=='f')
{
return 1;
}
}
else
{
return 2;
}
}
答案 0 :(得分:0)
我认为创建一个存储模式的公共位置没有任何问题。事实上,这似乎是一个很好的方法。但是,我认为不需要让您的个人检查功能了解全局存储。相反,他们应该只是知道他们正在检查的模式以及他们检查的来源。如果采用这种方法,您的检查代码可以大大简化
var make_check = function (pattern) {
return function (text, id, res) {
if(!pattern.exec(text.value)) {
o2(id,res);
return 0;
}
return 1;
};
};
var check_name = make_check(patterns.name);
var check_email = make_check(patterns.email);
var check_pass = make_check(patterns.pass);
var check_url = make_check(patterns.url);
这里我从检查功能中删除了全局存储的概念。由于代码的其余部分非常相似,因此可以将其抽象为单个方法,该方法传递的是匹配的模式。