Necesito eliminar todos los caracteres de una cadena, excepto guiones, letras, números, espacios y guiones bajos.
Varias respuestas en SO se acercan tentadoramente ( Reemplazar todos los caracteres excepto letras, números, espacios y guiones bajos , Eliminar todos los caracteres excepto letras, espacios y apóstrofes , etc.) pero generalmente no incluyen guiones.
La ayuda sería muy apreciada.
Podrías hacer algo como lo siguiente:
$string = ';")<br>kk23how nowbrowncow_-asdjhajsdhasdk32423ASDASD*%$@#!^ASDASDSA4sadfasd_-?!'; $new_string = preg_replace('/[^ \w-]/', '', $string); echo $new_string;[^] representa una lista de caracteres que NO deben coincidir\w es una abreviatura de carácter de palabra [A-Za-z0-9_]- coincide con un guión literalmenteProbablemente necesites algo como:
$new = preg_replace('/[^ \w-]/', '', $old);Explicación :
[^ \w-] Match any single character NOT present in the list below «[^ \w-]» The literal character “ ” « » A “word character” (Unicode; any letter or ideograph, any number, underscore) «\w» The literal character “-” «-»