Also on the phone part, it falls down if the phone number has an extension.
I would work on a way to have the formatting decorators (parentheses, dashes etc) only show up if there is data past that point.
So you could include " x" in the event that someone types in an extension or something like that.
Properly parsing/formatting phone numbers is harder than you'd think..
How do you specify the mask for different numbering schemes (other regions/countries)?
Do you pick one dynamically based on the selected country? Do you have that database of masks-to-country?
What if my contact number is international or foreign (even if I pick my country as USA)? Do you let the user select a mask? That feels clunky and more work than just leaving the phone number free-form..