diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index 714a1642f8..d6280fa537 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -279,9 +279,9 @@ std::string str_snake_case(const std::string &str) { } std::string str_sanitize(const std::string &str) { std::string out; - std::copy_if(str.begin(), str.end(), std::back_inserter(out), [](const char &c) { + std::replace_if(str.begin(), str.end(), [](const char &c) { return c == '-' || c == '_' || (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); - }); + }, '_'); return out; } std::string str_snprintf(const char *fmt, size_t len, ...) { diff --git a/esphome/helpers.py b/esphome/helpers.py index 4012b2067f..00416b591f 100644 --- a/esphome/helpers.py +++ b/esphome/helpers.py @@ -357,6 +357,9 @@ def snake_case(value): return value.replace(" ", "_").lower() +_DISALLOWED_CHARS = re.compile(r"[^a-zA-Z0-9_]") + + def sanitize(value): """Same behaviour as `helpers.cpp` method `str_sanitize`.""" - return re.sub("[^-_0-9a-zA-Z]", r"", value) + return _DISALLOWED_CHARS.sub("_", value)