Case differences can be handled using functions from stringr. Here's an example of how to convert everything to sentence case. Once the case has been standardized, you can convert it to a factor.
regions <- c("Abruzzo", "CALABRIA", "lombardy", "TUScany")
stringr::str_to_sentence(regions)
#> [1] "Abruzzo" "Calabria" "Lombardy" "Tuscany"
Created on 2020-05-14 by the reprex package (v0.3.0)
Misspellings are harder to deal with. You'll probably have to use something like forcats::fct_collapse() to combine the misspelled regions into the correct factor level.