package main import ( "errors" "regexp" "strconv" "strings" ) func convert_price(price string) (int, error) { if "" == price { return 0, errors.New("convert_price: Empty string") } multiply_by_10 := false multiply_by_100 := true price = strings.TrimSpace(price) price = strings.TrimPrefix(price, "€") price = strings.TrimSpace(price) price = strings.TrimSuffix(price, "€") price = strings.TrimSpace(price) price = strings.TrimSuffix(strings.ToLower(price), "eur") price = strings.TrimSpace(price) price = strings.TrimSuffix(strings.ToLower(price), "euro") price = strings.TrimSpace(price) r, err := regexp.Compile(`([0-9]+[.])?[0-9]+([.,][0-9]+)?`) if err != nil { return 0, err } price = r.FindString(price) if len(price) < 2 { price = "00" + price } else if len(price) < 3 { price = "0" + price } c := string(price[len(price)-2:]) c = string(c[0:1]) /* Extracts the second last char and checks if it's a "." or a ",". */ if "," == c { if strings.Count(price, ",") > 1 { return 0, errors.New("Invalid format") } multiply_by_10 = true multiply_by_100 = false } else if "." == c { if strings.Count(price, ".") > 1 { return 0, errors.New("Invalid format") } multiply_by_10 = true multiply_by_100 = false } c = string(price[len(price)-3:]) c = string(c[0:1]) /* Extracts the third last char and checks if it's a "." or a ",". */ if "," == c { if strings.Count(price, ",") > 1 { return 0, errors.New("Invalid format") } multiply_by_10 = false multiply_by_100 = false } else if "." == c { if strings.Count(price, ".") > 1 { return 0, errors.New("Invalid format") } multiply_by_10 = false multiply_by_100 = false } price = strings.Replace(price, ",", "", -1) price = strings.Replace(price, ".", "", -1) /* Casts the price to integer in cents (not euro!). */ price_int, err := strconv.Atoi(price) if err != nil { Println(err, price) return 0, err } if multiply_by_10 { price_int = price_int * 10 } else if multiply_by_100 { price_int = price_int * 100 } return price_int, nil }