To answer your question, it depends what you're going to do with the input data.
From a security perspective:
If you're going to insert it in a SQL table, just make sure to escape it properly.
If you're going to use it in a bash function call, same, make sure to escape it properly.
Technically, if you escape it properly, you can allow any characters.
From a programming perspective:
If you're accepting a name, then you should look for name validation patterns.
If you're accepting a phone number, then you should look for phone number patterns.
You can find most of those answers on Stackoverflow.
Conclusion:
The ability to accept inputs securely is separate from the validation of the meaning of your data.
So you have two jobs to do for every field, validate that the input is proper for the expected field (e.g. phone, name, email, etc), and make sure to escape it properly when you pass it on to another system like a DB or BASH or other for storage or processing or other.