javascript - una - quitar caracteres especiales c#
Eliminar caracteres no alfanuméricos de la cadena. Tener problemas con el caracter (5)
Quiero convertir la siguiente cadena a la salida proporcionada.
Input: "//test/red/bob/fred/new"
Output: "testredbobfrednew"
No he encontrado ninguna solución que maneje caracteres especiales como /r
, /n
, /b
, etc.
Básicamente solo quiero deshacerme de cualquier cosa que no sea alfanumérica. Esto es lo que he intentado ...
Attempt 1: "//test/red/bob/fred/new".replace(/[_/W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "//test/red/bob/fred/new".replace(/[''`~!@#$%^&*()_|+-=?;:''",.<>/{/}/[/]////]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "//test/red/bob/fred/new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "//test/red/bob/fred/new".replace(/[^a-z0-9/s]/gi, '''');
Output 4: "testedobred [newline] ew"
Otro intento con múltiples pasos
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( //t/ , "T");
id = id.replace( //n/ , "N");
id = id.replace( //r/ , "R");
id = id.replace( //b/ , "B");
id = id.replace( //f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
con resultados
Attempt 1: cleanID("//test/red/bob/fred/new");
Output 1: "BTESTREDOBFREDNEW"
Cualquier ayuda sería apreciada.
Solución de trabajo:
Final Attempt 1: return JSON.stringify("//test/red/bob/fred/new").replace( //W/g , '''');
Output 1: "testredbobfrednew"
Eliminar caracteres no alfanuméricos
La siguiente es la / a correcta expresión regular para quitar caracteres no alfanuméricos de una cadena de entrada:
input.replace(//W/g, '''')
Tenga en cuenta que /W
es el equivalente de [^0-9a-zA-Z_]
- incluye el carácter de guión bajo. Para eliminar también los subrayados, use, por ejemplo:
input.replace(/[^0-9a-z]/gi, '''')
La entrada está mal formada
Como la cadena de prueba contiene varios caracteres escapados, que no son alfanuméricos, los eliminará.
Una barra invertida en la cadena necesita escaparse si se debe tomar literalmente:
"//test//red//bob//fred//new".replace(//W/g, '''')
"testredbobfrednew" // output
Manejo de cadenas malformadas
Si no puede escapar de la cadena de entrada correctamente (¿por qué no?), O proviene de algún tipo de fuente no confiable / desconfigurada, puede hacer algo como esto:
JSON.stringify("//test/red/bob/fred/new").replace(//W/g, '''')
"testredbobfrednew" // output
Tenga en cuenta que la representación json de una cadena incluye las comillas:
JSON.stringify("//test/red/bob/fred/new")
""//test/red/bob/fred/new""
Pero también son eliminados por la regex de reemplazo.
El problema no está en cómo reemplazas los personajes, sino en cómo ingresas la cadena.
Es solo la primera barra invertida en la entrada que es una barra invertida, los otros son parte de los caracteres de control /r
, /b
, /f
y /n
.
Como esas barras diagonales inversas no son caracteres separados, sino parte de la notación para escribir un solo carácter de control, no se pueden eliminar por separado. Es decir, no puede eliminar la barra diagonal inversa de /n
ya que no se trata de dos caracteres separados, sino de la forma en que escribe el carácter de control LF
o el avance de línea .
Si inicialmente desea convertir esa entrada en la salida deseada, deberá reemplazar cada carácter de control con la letra correspondiente, por ejemplo, reemplazar el carácter /n
con el carácter n
.
Para reemplazar un carácter de control, necesitas usar un juego de caracteres como [/r]
, ya que /r
tiene un significado especial en una expresión regular:
var input = "//test/red/bob/fred/new";
var output = input
.replace(/[/r]/g, ''r'')
.replace(/[/b]/g, ''b'')
.replace(/[/f]/g, ''f'')
.replace(/[/n]/g, ''n'')
.replace(////g, '''');
Demostración: http://jsfiddle.net/SAp4W/
Si quieres tener esta //test/red/bob/fred/new
string, deberías escapar de todas las barras invertidas ( /
). Cuando escribe //test//red//bob//fred//new
su cadena en realidad contiene barras invertidas simples. Puede estar seguro de esto imprimiendo su cadena.
Entonces si las barras invertidas en su cadena se escapan myString.replace(//W/g,'''')
funcionará normalmente.
Todas las respuestas actuales todavía tienen peculiaridades, lo mejor que se me ocurrió fue:
string.replace(/[^A-Za-z0-9]/g, '''');
Aquí hay un ejemplo que captura cada tecla que pude encontrar en el teclado:
var string = ''123abcABC-_*(!@#$%^&*()_-={}[]:/"<>,.?/~`'';
var stripped = string.replace(/[^A-Za-z0-9]/g, '''');
console.log(stripped);
Salidas: ''123abcABC''
puedes probar esta expresión regular:
value.replace(/[/W_-]/g, '''');