Да, но его можно немного оптимизировать:
preg_replace('/[^\w-]/', '', $string);
\w
соответствует буквенно-цифровым символам и подчеркиванию. Это имеет дополнительное преимущество, заключающееся в том, что допускаются символы с акцентом, если позволяет ваш языковой стандарт.