Here's is my javascript regex for a city name and it's handling almost all cases except this.
^[a-zA-Z]+[\. - ']?(?:[\s-][a-zA-Z]+)*$
(Should pass)
- Coeur d'Alene
- San Tan Valley
- St. Thomas
- St. Thomas-Vincent
- St. Thomas Vincent
- St Thomas-Vincent
- St-Thomas
- anaconda-deer lodge county
(Should Fail)
- San. Tan. Valley
- St.. Thomas
- St.. Thomas--Vincent
- St.- Thomas -Vincent
- St--Thomas