What could the reasoning behind those requirements possibly be?
So rather than discovering the correct way to do things, they try to prevent you from using any characters that might be involved in an SQL injection.
In some cases the guys on the backend know what they're doing, but the requirement can still be passed down from on high from some manager who absorbed the practice from another project.
Edit: If you meant the "but not %, ^, &, or *" requirement, that's an indication that the devs don't know how to use prepared statements or at least escape properly.