Why force the user? Why not leave the „thinking“ to the machine and allow the user to input their phone number in any format they want? Why not try to geolocate the user first and pre-fill the form with at least state/code? Then it’s even easier to pre-fill the area code for the phone number.
If geolocation is out if the question why not help the user with state after they input city name? There’s a finite number of options there. After some time you can use the data with pretty good accuracy. If 66% of your users input city X/state Y next time someone uses city X it’s pretty safe to assume the state is going to be Y. The user can always change that, but 2 out of 3 times that data would be correct and won’t require any changes.