package orders import ( "fmt" "math" "regexp" "strconv" "strings" "unicode" ) func isValidPolishMobile(nineDigitNum string) bool { if len(nineDigitNum) != 9 { return false } firstDigit := nineDigitNum[0] if firstDigit < '4' || firstDigit > '8' { return false } prefix2 := nineDigitNum[:2] validPrefixes := map[string]bool{ "45": true, "50": true, "51": true, "53": true, "57": true, "60": true, "66": true, "69": true, "72": true, "73": true, "78": true, "79": true, "88": true, } return validPrefixes[prefix2] } func parsePhone(input string) (string, error) { input = strings.TrimSpace(input) if strings.HasPrefix(input, "+48") { input = strings.TrimPrefix(input, "+48") } else if strings.HasPrefix(input, "0048") { input = strings.TrimPrefix(input, "0048") } re := regexp.MustCompile(`\D`) cleaned := re.ReplaceAllString(input, "") if len(cleaned) == 11 && strings.HasPrefix(cleaned, "48") { cleaned = cleaned[2:] } if len(cleaned) != 9 { return "", fmt.Errorf("Numer telefonu musi mieć 9 cyfr") } if !isValidPolishMobile(cleaned) { return "", fmt.Errorf("Nieprawidłowy numer telefonu — podaj polski numer komórkowy") } return cleaned, nil } func parseFloat(input string) (int, error) { val, err := strconv.ParseFloat(input, 64) if err != nil { return 0, fmt.Errorf("Nieprawidłowa wartość") } if val < 0 || val > 100 { return 0, fmt.Errorf("Wartość musi być między 0 a 100") } doubled := val * 2 if math.Abs(doubled-math.Round(doubled)) > 1e-9 { return 0, fmt.Errorf("Wartość musi być wielokrotnością 0,5") } return int(math.Round(val * 10)), nil } func validName(name string) bool { if name == "" || len(name) > 100 { return false } return strings.IndexFunc(name, unicode.IsControl) == -1 }