diff --git a/modules/validations/generic_name.js b/modules/validations/generic_name.js index 9ab314901..10dfc15e6 100644 --- a/modules/validations/generic_name.js +++ b/modules/validations/generic_name.js @@ -9,26 +9,38 @@ import { discardNames } from '../../node_modules/name-suggestion-index/config/fi export function validationGenericName() { var type = 'generic_name'; + // known list of generic names (e.g. "bar") + var discardNamesRegexes = discardNames.map(function(discardName) { + return new RegExp(discardName, 'i'); + }); + + var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism']; function isGenericName(entity) { var name = entity.tags.name; if (!name) return false; + name = name.toLowerCase(); - var i, re; + var i, key, val; - // test if the name is just the tag value (e.g. "park") - var keys = ['amenity', 'leisure', 'shop', 'man_made', 'tourism']; - for (i = 0; i < keys.length; i++) { - var val = entity.tags[keys[i]]; - if (val && val.replace(/\_/g, ' ').toLowerCase() === name.toLowerCase()) { - return name; + // test if the name is just the key or tag value (e.g. "park") + for (i = 0; i < keysToTestForGenericValues.length; i++) { + key = keysToTestForGenericValues[i]; + val = entity.tags[key]; + if (val) { + val = val.toLowerCase(); + if (key === name || + val === name || + key.replace(/\_/g, ' ') === name || + val.replace(/\_/g, ' ') === name) { + return name; + } } } - // test if the name is a generic name (e.g. "pizzaria") - for (i = 0; i < discardNames.length; i++) { - re = new RegExp(discardNames[i], 'i'); - if (re.test(name)) { + // test if the name is otherwise generic + for (i = 0; i < discardNamesRegexes.length; i++) { + if (discardNamesRegexes[i].test(name)) { return name; } }