Je veux convertir la chaîne suivante à la sortie fournie.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Je n'ai trouvé aucune solution permettant de gérer des caractères spéciaux tels que \r
, \n
, \b
, etc.
En gros, je veux juste me débarrasser de tout ce qui n’est pas alphanumérique. Voici ce que j'ai essayé ...
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"
Une autre tentative en plusieurs étapes
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]/ , "");
}
avec des résultats
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Toute aide serait appréciée.
Solution de travail:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
Ce qui suit est le/un regex correct pour éliminer les caractères non alphanumériques d'une chaîne d'entrée:
input.replace(/\W/g, '')
Notez que \W
est l'équivalent de [^0-9a-zA-Z_]
- il comprend le caractère de soulignement. Pour supprimer également les traits de soulignement, utilisez par exemple:
input.replace(/[^0-9a-z]/gi, '')
Puisque la chaîne de test contient divers caractères d'échappement, qui ne sont pas alphanumériques, elle les supprimera.
Une barre oblique inversée dans la chaîne doit être évitée si elle doit être prise à la lettre:
"\\test\\red\\bob\\fred\\new".replace(/\W/g, '')
"testredbobfrednew" // output
Si vous ne pouvez pas échapper correctement la chaîne d'entrée (pourquoi pas?), Ou si elle provient d'une source non fiable/mal configurée, vous pouvez faire quelque chose comme ceci:
JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '')
"testredbobfrednew" // output
Notez que la représentation json d'une chaîne inclut les guillemets:
JSON.stringify("\\test\red\bob\fred\new")
""\\test\red\bob\fred\new""
Mais ils sont également supprimés par la regex de remplacement.
Toutes les réponses actuelles ont encore des problèmes, la meilleure chose que j'ai pu trouver était:
string.replace(/[^A-Za-z0-9]/g, '');
Voici un exemple qui capture toutes les touches que je pourrais trouver sur le clavier:
var string = '123abcABC-_*(!@#$%^&*()_-={}[]:\"<>,.?/~`';
var stripped = string.replace(/[^A-Za-z0-9]/g, '');
console.log(stripped);
Sorties: '123abcABC'
Le problème ne réside pas dans la façon dont vous remplacez les caractères, mais dans la manière dont vous entrez la chaîne.
Seule la première barre oblique inversée de l'entrée est une barre oblique inversée, les autres font partie des caractères de contrôle \r
, \b
, \f
et \n
.
Comme ces barres obliques inverses ne sont pas des caractères distincts, mais font partie de la notation permettant d'écrire un seul caractère de contrôle, elles ne peuvent pas être supprimées séparément. C'est à dire. vous ne pouvez pas supprimer la barre oblique inverse de \n
car il ne s'agit pas de deux caractères distincts, mais de la manière dont vous écrivez le caractère de contrôle LF
ou line feed.
Si vous souhaitez réellement transformer cette entrée en sortie souhaitée, vous devez remplacer chaque caractère de contrôle par la lettre correspondante, par ex. remplacez le caractère \n
par le caractère n
.
Pour remplacer un caractère de contrôle, vous devez utiliser un jeu de caractères tel que [\r]
, car \r
a une signification particulière dans une expression régulière:
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, '');
vous pouvez essayer cette regex:
value.replace(/[\W_-]/g, '');
Cela supprime tous les caractères non alphanumériques, préserve la capitalisation et préserve les espaces entre les mots.
function alpha_numeric_filter (string) {
const alpha_numeric = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + ' ')
const json_string = JSON.stringify(string)
let filterd_string = ''
for (let i = 0; i < json_string.length; i++) {
let char = json_string[i]
let index = alpha_numeric.indexOf(char)
if (index > -1) {
filterd_string += alpha_numeric[index]
}
}
return filterd_string
}
const input = "\\test\red\bob\fred\new"
console.log(alpha_numeric_filter(input)) //=> testredbobfrednew
const complex_string = "/_&_This!&!! is!@#$% a%^&*() Sentence+=-[]{} 123:;\|\\]||~`/.,><"
console.log(alpha_numeric_filter(complex_string)) //=> This is a Sentence 123