Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在输入查询中允许宽大处理?_Javascript_Json - Fatal编程技术网

Javascript 如何在输入查询中允许宽大处理?

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

我希望用户能够输入一个名称并让代码工作,即使名称与数据集中的名称不完全相同。例如:输入“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/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”之间,它不起作用