Maybe you will find this article helpful. You may try the following expression
^.*(?=.{8,})(?=.*[\d])(?=.*[\W]).*$
and the breakdown:
(?=.{8,})- contains at least 8 characters(?=.*[\d])- contains at least one digit(?=.*[\W])- contains at least one special character