Elimine todos los caracteres especiales excepto el espacio de una cadena usando JavaScript


157

Quiero eliminar todos los caracteres especiales excepto el espacio de una cadena usando JavaScript.

Por ejemplo, abc's test#s debería salir como abcs tests.


3
¿Cómo se define el carácter especial?
Keith Irwin el

Respuestas:


349

Debe usar la función de reemplazo de cadena, con una sola expresión regular. Asumiendo por caracteres especiales, quieres decir cualquier cosa que no sea letra, aquí hay una solución:

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));


55
Para utilizar esta solución en alfabeto no latino por favor revise esta respuesta fuera
Efkan

¡Esto también eliminará caracteres numéricos!
tech_geek

15
@tech_geek que puedes hacerstr.replace(/[^a-zA-Z0-9]/g, "")
Chidi Williams

2
En realidad necesitas este str.replace(/[^a-zA-Z0-9 ]/g, "");aviso, hay un espacio entre 0-9 y]
Ammar Shah

Necesita algunos ajustes, no eliminó / o - los caracteres y se supone que el primer carácter de camelCase está en minúsculas, pero este en mayúsculas.
Sansun

133

Puede hacerlo especificando los caracteres que desea eliminar:

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

Alternativamente, para cambiar todos los caracteres excepto números y letras, intente:

string = string.replace(/[^a-zA-Z0-9]/g, '');

44
¿Qué pasa si no quiero eliminar el espacio con esto? /[^a-zA-Z0-9]/g
aadi1295

8
@ArbazAbid para mantener el espacio, solo agrégalo a los caracteres de la lista blanca. su expresión regular sería "/ [^ a-zA-Z0-9] / g" (observe el espacio en blanco después de 9)
Crhistian Ramirez

1
Esta fue la respuesta que funcionó, si se requiere un espacio.
Nathan

esto reemplaza ()y whitespacesen cadena.text().replace(/[ ()]/g, '')
C Alonso C Ortega

30

La primera solución no funciona para ningún alfabeto UTF-8. (Cortará texto como Привіт). He logrado crear una función que no utiliza RegExp y utiliza un buen soporte UTF-8 en el motor de JavaScript. La idea es simple si un símbolo es igual en mayúsculas y minúsculas, es un carácter especial. La única excepción se hace para los espacios en blanco.

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

Actualización: Tenga en cuenta que esta solución solo funciona para idiomas donde hay letras minúsculas y mayúsculas. En idiomas como el chino, esto no funcionará.

Actualización 2: llegué a la solución original cuando estaba trabajando en una búsqueda difusa. Si también está tratando de eliminar caracteres especiales para implementar la funcionalidad de búsqueda, existe un mejor enfoque. Use cualquier biblioteca de transliteración que produzca su cadena solo de caracteres latinos y luego el simple Regexp hará toda la magia de eliminar caracteres especiales. (Esto también funcionará para los chinos y también recibirá beneficios secundarios al hacer Tromsø== Tromso).


Gracias por esta solución bastante creativa. Está mucho más en línea con el funcionamiento de los idiomas, ya que muchos de nosotros no consideramos caracteres especiales "Привіт" o "æøå". La mayoría de las soluciones por ahí cortan cualquier carácter que no sea parte del alfabeto inglés.
Alex Langberg

1
Casi la respuesta perfecta para mí, pero desafortunadamente considera que los caracteres chinos son caracteres especiales.
Eric Majerus

@EricMajerus y también hindi
programador

Tenga cuidado, esto también considera los números como caracteres especiales.
just_user

11

No conozco JavaScript, pero ¿no es posible usar regex?

Algo así [^\w\d\s]coincidirá con cualquier cosa menos dígitos, caracteres y espacios en blanco. Sería solo una pregunta para encontrar la sintaxis en JavaScript.


1
stackoverflow.com/a/4374890/2384606 Esta es la respuesta a tu pregunta :)
Carmela

8

Probé la solución muy creativa de Seagul, pero descubrí que trataba los números también como caracteres especiales, lo que no se ajustaba a mis necesidades. Así que aquí está mi ajuste (a prueba de fallos) de la solución de Seagul ...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

Olvidó declarar regen su primera función.
Noman Ali

6

buscar todos los no (caracteres de palabras || espacio):

str.replace(/[^\w ]/, '')

1

Intenta usar este

var result= stringToReplace.replace(/[^\w\s]/gi, '')

aquí ^ quilate es para negación \ w para caracteres de palabras [a-zA-Z0-9_] y \ s para espacio / [] / gi para global


0

El punto (.) no puede considerarse especial. He agregado una condición OR a la respuesta de Mozfet & Seagull:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

Los caracteres especiales que desea eliminar de una cadena, prepare una lista de ellos y luego la función de reemplazo de JavaScript del usuario para eliminar todos los caracteres especiales.

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

o puede ejecutar el bucle para una cadena completa y comparar un solo carácter con el código ASCII y regenerar una nueva cadena.


9
No, por favor no hagas eso. Es realmente terriblemente lento. Es mucho, mucho mejor usar una expresión regular.
Keith Irwin el

Esta solución es muy buena para reemplazar solo un personaje. En mi caso fue útil, gracias.
Vahid Najafi

En lugar de usar el método de reemplazo muchas veces, úselo solo una vez usando expresiones regulares.
FAISAL
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.