I have a mysql query generated in php that selects some products from a database table.

What I need it to do is check the model_names field for a regular expression.

Basically I wish to select 21 products from the product table but only ones that contain alphanumeric characters, standard keyboard symbols such as ! @ # $ % ^ & * ( ) _ - + = : ; " '> < . , ? /| \ } { [ ] space etc.

My question is how would I format the regex to include the alphanumeric characters and my selection of symbols that I can add or remove as needed and an unlimited quantity of each in any order within the field, and not select rows where that field contains anything else.

Currently I have
"SELECT * FROM `cms_product` WHERE `enddate` > '$timenow' AND `product_image` != '' AND `product_description` NOT LIKE '%http://%' AND `model_names` REGEXP '^[A-Za-z0-9-]+$' $useroptions ORDER BY RAND() LIMIT 21"
Which is fine for selecting only alphanumerc characters for that field but I need to add a few symbols to the list and various punctuation etc.

Please any help appreciated, trying to figure this out by tonight for an urgent change i need to make for a client but haven't used this before.