diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index 9ec8a406b17..46a28ea7c18 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -3945,24 +3945,22 @@ bool String::is_absolute_path() const { } } -static _FORCE_INLINE_ bool _is_valid_identifier_bit(int p_index, char32_t p_char) { - if (p_index == 0 && is_digit(p_char)) { - return false; // No start with number plz. - } - return is_ascii_identifier_char(p_char); -} - String String::validate_identifier() const { if (is_empty()) { return "_"; // Empty string is not a valid identifier; } - String result = *this; + String result; + if (is_digit(operator[](0))) { + result = "_" + *this; + } else { + result = *this; + } + int len = result.length(); char32_t *buffer = result.ptrw(); - for (int i = 0; i < len; i++) { - if (!_is_valid_identifier_bit(i, buffer[i])) { + if (!is_ascii_identifier_char(buffer[i])) { buffer[i] = '_'; } } @@ -3977,10 +3975,14 @@ bool String::is_valid_identifier() const { return false; } + if (is_digit(operator[](0))) { + return false; + } + const char32_t *str = &operator[](0); for (int i = 0; i < len; i++) { - if (!_is_valid_identifier_bit(i, str[i])) { + if (!is_ascii_identifier_char(str[i])) { return false; } } diff --git a/tests/core/string/test_string.h b/tests/core/string/test_string.h index a716b13022f..e2156602990 100644 --- a/tests/core/string/test_string.h +++ b/tests/core/string/test_string.h @@ -1711,7 +1711,7 @@ TEST_CASE("[String] validate_identifier") { CHECK(empty_string.validate_identifier() == "_"); String numeric_only = "12345"; - CHECK(numeric_only.validate_identifier() == "_2345"); + CHECK(numeric_only.validate_identifier() == "_12345"); String name_with_spaces = "Name with spaces"; CHECK(name_with_spaces.validate_identifier() == "Name_with_spaces");