feat: validate more special chars
This commit is contained in:
+20
-17
@@ -5,23 +5,16 @@ import (
|
||||
"unicode"
|
||||
)
|
||||
|
||||
/*
|
||||
TODO: валидация имён
|
||||
|
||||
Произвольные наименования, выбираемые игроком, могут иметь классы кораблей,
|
||||
планеты, флоты и науки. Имена не могут быть длиннее 30 символов. Символы
|
||||
могут быть буквами алфавита, цифрами и спецсимволами '!@#$%^*-_=+~()[]{}'.
|
||||
Спецсимволы не могут находиться в начале или конце имени а так же повторяться
|
||||
более одного раза подряд.
|
||||
*/
|
||||
|
||||
// Allowed special characters
|
||||
var allowedSpecialChars = map[rune]bool{
|
||||
'@': true,
|
||||
'^': true,
|
||||
'~': true,
|
||||
'-': true,
|
||||
'_': true,
|
||||
const specialChars = "!@#$%^*-_=+~()[]{}"
|
||||
|
||||
var allowedSpecialChars map[rune]bool
|
||||
|
||||
func init() {
|
||||
allowedSpecialChars = make(map[rune]bool)
|
||||
for _, r := range []rune(specialChars) {
|
||||
allowedSpecialChars[r] = true
|
||||
}
|
||||
}
|
||||
|
||||
func ValidateTypeName(input string) (string, bool) {
|
||||
@@ -40,10 +33,14 @@ func ValidateTypeName(input string) (string, bool) {
|
||||
}
|
||||
|
||||
// Dash cannot be at the beginning or end
|
||||
if runes[0] == '-' || runes[len(runes)-1] == '-' {
|
||||
if allowedSpecialChars[runes[0]] || allowedSpecialChars[runes[len(runes)-1]] {
|
||||
return "", false
|
||||
}
|
||||
// if runes[0] == '-' || runes[len(runes)-1] == '-' {
|
||||
// return "", false
|
||||
// }
|
||||
|
||||
var specialCount uint8
|
||||
for _, r := range runes {
|
||||
// Check if the character is a whitespace, which is not allowed
|
||||
if unicode.IsSpace(r) {
|
||||
@@ -52,16 +49,22 @@ func ValidateTypeName(input string) (string, bool) {
|
||||
|
||||
// Letters (including any alphabet) and digits are allowed
|
||||
if unicode.IsLetter(r) || unicode.IsDigit(r) {
|
||||
specialCount = 0
|
||||
continue
|
||||
}
|
||||
|
||||
// Combining marks (accents) are allowed
|
||||
if unicode.IsMark(r) {
|
||||
specialCount = 0
|
||||
continue
|
||||
}
|
||||
|
||||
// Check for allowed special characters
|
||||
if allowedSpecialChars[r] {
|
||||
if specialCount == 2 {
|
||||
return "", false
|
||||
}
|
||||
specialCount++
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user