You can do all that with the Display, Edit and Validation patterns. You need to use a text field.
For the Display pattern use the pre-made Phone Number pattern: text{'('999')' 999-9999}
For the Edit pattern use multiple options separated by the pipe character.
text{'('999')' 999-9999}|text{9999999999}|text{999.999.9999}|text{999-999-9999}|etc.
And then you can put the same pattern as the Display pattern into the Validation pattern if you want an error to be generated if the number doesn't match the pattern.