No, no puedes, y no deberías.
Este no es un método aceptable en absoluto. Filtrar es extremadamente difícil y lo más seguro es que te equivoques si intentas implementarlo tú mismo. Los filtros también deberán actualizarse a medida que se amplíe el estándar HTML (HTML5, por ejemplo, agrega una gran cantidad de nuevos atributos de eventos que se pueden usar para ingresar un contexto de JavaScript).
La única defensa adecuada contra XSS es la codificación que depende del contexto al imprimir valores. Lo ideal sería utilizar un motor de plantillas para codificar HTML automáticamente todos los resultados, y codificar JavaScript manualmente cuando sea necesario.
Un POC simple para omitir tu filtro sería:
<img src=x onerror=alert(1)>
Hay muchas más etiquetas y atributos que pueden llevar a XSS. Además, también debe preocuparse por la inyección de HTML y CSS.
Si desea un filtro adicional al recuperar la entrada, que nunca debe ser su única línea de defensa, pero que se recomienda como defensa en profundidad, debe adaptarla a cada campo de entrada. Los nombres son difíciles, así que no los filtraría, pero cuando sabes que solo esperas, por ejemplo, el alfanum, puedes filtrar por eso. También puedes usar alguna librería como HTMLPurifier. Pero, de nuevo, solo lo recomendaría como defensa en profundidad o si realmente necesita algunas etiquetas HTML que se analizan (lo que no es el caso de los nombres; los nombres pueden contener caracteres como '
o incluso "
y <
, pero ciertamente no deberían ser analizados como HTML por el navegador).