Elimina todos los caracteres no alfanuméricos usando preg_replace

2 minutos de lectura

avatar de usuario
lisovaccaro

¿Cómo puedo eliminar todos los caracteres no alfanuméricos de una cadena en PHP?

Este es el código que estoy usando actualmente:

$url = preg_replace('/\s+/', '', $string);

Solo reemplaza los espacios en blanco.

  • posible duplicado de ¿Cómo elimino caracteres no alfanuméricos en una cadena? (incluyendo ß, Ê, etc.)

    – mario

    4 de julio de 2012 a las 0:51

  • @mario: Eso es un poco diferente ya que se trata de Unicode. Estoy seguro de que existe un duplicado perfecto…

    – Alix Axel

    4 de julio de 2012 a las 0:57

  • posible duplicado de Eliminar caracteres no alfanuméricos

    – Trejder

    15 de enero de 2015 a las 13:04

avatar de usuario
Juan Conde

$url = preg_replace('/[^\da-z]/i', '', $string);

  • En caso de que alguien más se sintiera momentáneamente confundido por el comentario de Xeoncross a primera vista, su punto era que la respuesta no Admite caracteres Unicode. Pero la solución en el enlace de Xeoncross lo hace.

    – orden

    29 de septiembre de 2016 a las 4:57


Al principio, así es como lo haría.

$str="qwerty!@#$@#$^@#$Hello%#$";

$outcome = preg_replace("/[^a-zA-Z0-9]/", "", $str);

var_dump($outcome);
//string(11) "qwertyHello"

¡Espero que esto ayude!

No estoy seguro de por qué nadie más ha sugerido esto, pero parece ser la expresión regular más simple:

preg_replace("/\W|_/", "", $string)

También puedes verlo en acción aquí: http://phpfiddle.org/lite/code/0sg-314

  • Lo más sencillo y eficaz a la vez es preg_replace("/[\W_]+/", "", $string).

    – Wiktor Stribiżew

    26 de junio de 2016 a las 10:55

Puedes usar,

$url = preg_replace('/[^\da-z]/i', '', $string);

Puede usar para caracteres Unicode,

$url = preg_replace("/[^[:alnum:][:space:]]/u", '', $string);

preg_replace('/[\s\W]+/', '', $string)

Parece funcionar, en realidad el ejemplo estaba en la documentación de PHP en preg_replace

  • Tenga en cuenta que esto será mantener guiones bajos, ya que se consideran caracteres de palabras y también mantienen espacios

    – Juan Condé

    4 de julio de 2012 a las 0:43


  • No sabía sobre los guiones bajos, pero no guarda espacios.

    – lisovaccaro

    4 de julio de 2012 a las 2:08

avatar de usuario
Alix Axel

$alpha="0-9a-z"; // what to KEEP
$regex = sprintf('~[^%s]++~i', preg_quote($alpha, '~')); // case insensitive

$string = preg_replace($regex, '', $string);

  • Tenga en cuenta que esto será mantener guiones bajos, ya que se consideran caracteres de palabras y también mantienen espacios

    – Juan Condé

    4 de julio de 2012 a las 0:43


  • No sabía sobre los guiones bajos, pero no guarda espacios.

    – lisovaccaro

    4 de julio de 2012 a las 2:08

¿Ha sido útil esta solución?