diff options
author | Alex Zolotarev <alex@maps.me> | 2016-04-06 19:35:27 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2016-04-07 19:56:52 +0300 |
commit | 9e323f16eb3a47902a702d4bc2e2fd55e42a8278 (patch) | |
tree | 659168cd0838d6534551d6f0afa364bf13e56ae2 /indexer/editable_map_object.cpp | |
parent | 7802303f12acec707b6ab330c987b9b75a2be353 (diff) |
Basic validation of house numbers.
Diffstat (limited to 'indexer/editable_map_object.cpp')
-rw-r--r-- | indexer/editable_map_object.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp index cd689ca92b..c12443590f 100644 --- a/indexer/editable_map_object.cpp +++ b/indexer/editable_map_object.cpp @@ -4,6 +4,9 @@ #include "indexer/ftypes_matcher.hpp" #include "base/macros.hpp" +#include "base/string_utils.hpp" + +#include "std/cctype.hpp" namespace osm { @@ -94,12 +97,35 @@ void EditableMapObject::SetNearbyStreets(vector<string> && streets) { m_nearbyStreets = move(streets); } + +// static +bool EditableMapObject::ValidateHouseNumber(string const & houseNumber) +{ + if (houseNumber.empty()) + return true; + + strings::UniString us = strings::MakeUniString(houseNumber); + // TODO: Improve this basic limit - it was choosen by @Zverik. + auto constexpr kMaxHouseNumberLength = 15; + if (us.size() > kMaxHouseNumberLength) + return false; + + // TODO: Should we allow arabic numbers like U+0661 ١ Arabic-Indic Digit One? + strings::NormalizeDigits(us); + for (strings::UniChar const c : us) + { + // Valid house numbers contain at least one number. + if (c >= '0' && c <= '9') + return true; + } + return false; +} + void EditableMapObject::SetHouseNumber(string const & houseNumber) { - // TODO(AlexZ): Check house number for validity with feature::IsHouseNumber ? - // TODO(AlexZ): Store edited house number as house name if feature::IsHouseNumber() returned false. m_houseNumber = houseNumber; } + void EditableMapObject::SetPostcode(string const & postcode) { m_metadata.Set(feature::Metadata::FMD_POSTCODE, postcode); |