Javascript 如何在输入查询中允许宽大处理?
我希望用户能够输入一个名称并让代码工作,即使名称与数据集中的名称不完全相同。例如:输入“Camden”有效,但输入“Camden”无效并返回错误 如何使代码允许非大写字母甚至错误的字母Javascript 如何在输入查询中允许宽大处理?,javascript,json,Javascript,Json,我希望用户能够输入一个名称并让代码工作,即使名称与数据集中的名称不完全相同。例如:输入“Camden”有效,但输入“Camden”无效并返回错误 如何使代码允许非大写字母甚至错误的字母 app.get("/api/borough_by_name", function(req, res){ // set the type of content in the response res.writeHead(200, {'Content-Type': 'application/j
app.get("/api/borough_by_name", function(req, res){
// set the type of content in the response
res.writeHead(200, {'Content-Type': 'application/json'});
// read input parameter from request
var name = req.query['name'];
// validate input, check if the parameter is valid or not
if (name === undefined){
// return error as a JSON string
var str = JSON.stringify( {"error":"Parameter 'name' is not defined."} );
res.end( str );
}
var borObj = null;
// loop over the statesData GeoJSON structure
for (i in londonBoroughs.features){
var feat = londonBoroughs.features[i];
if (feat.properties.NAME == name){
borObj = feat;
continue;
}
}
if (borObj == null){
// borough not found, return an error as a JSON string
var str = JSON.stringify( {"error":"NAME '"+name+"' doesn't exist. Please check the spelling."} );
res.end( str );
}
var respJson = {};
respJson["results"] = [ borObj ];
res.end( JSON.stringify( respJson ) );
您可以使用字符串方法或进行大小写规范化:
> var name = "Camden"
> name.toLowerCase() === "camden"
true
对于错误的字母,您可以查看,例如,可以找到的许多实现 最简单的方法是用大写字母比较两个变量:str.toUpperCase() 因此,它将匹配任何大写字母的名称,卡姆登,卡姆登,等等
feat.properties.NAME.toUppercase() == name.toUppercase()
要检查是否只有一个字母是错误的: 您可以使用Levenshtein distance算法来计算两个字符串之间的距离
if (getDistance("camden", "calden") === 1) { … }
和(第一个)在一起
要在不进行区分大小写检查的情况下比较两个字符串:
if ("Camden".toLowerCase() === "camden") { … }
你必须自己决定“宽大”的确切标准。我在使用“feat.properties.NAME.toUppercase()==NAME.toUppercase()不是函数”Luffydude时遇到了一个错误,该函数是toUppercase(),而不是toUppercase(C是大写字母),还要使用toUppercase()函数,属性必须是字符串,不能是对象。创建一个console.log(feat.properties.NAME)并检查是否回显字符串或对象。现在服务器使用大写C运行,但尝试使用“var feat”和“for”之间的行,它仍然返回错误,表示它不存在。这行应该转到其他地方吗?它不能介于“var feat”和“for”之间,因为“feat.properties.NAME”仅在“var feat”之后声明。对不起,我解释得不好。它没有把它放在“var feat”和“for”之间,但我把它放在“var feat”和“if”之间,它不起作用