Je voudrais un RegExp qui supprimera tous les caractères spéciaux d'une chaîne. J'essaie quelque chose comme ça, mais cela ne fonctionne pas dans IE7, bien que cela fonctionne dans Firefox.
var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
Une description détaillée du RegExp serait également utile.
javascript
regex
special-characters
Timothy Ruhle
la source
la source
Réponses:
Comme cela a été mentionné dans les commentaires, il est plus facile de le faire en tant que liste blanche - remplacez les caractères qui ne figurent pas dans votre liste de sécurité.
Le caractère caret (
^
) est la négation de l'ensemble[...]
,gi
disons global et insensible à la casse (ce dernier est un peu redondant mais je voulais le mentionner) et la liste sûre dans cet exemple est les chiffres, les mots, les traits de soulignement (\w
) et les espaces (\s
).la source
Notez que si vous souhaitez toujours exclure un ensemble, y compris des éléments tels que des barres obliques et des caractères spéciaux, vous pouvez effectuer les opérations suivantes:
veuillez noter que pour inclure également le caractère "moins", vous devez lui échapper avec une barre oblique inverse comme ce dernier groupe. si vous ne le faites pas, il sélectionnera également 0-9, ce qui n'est probablement pas souhaité.
la source
?
partie du jeu de caractères vers l'avant. cela répertorie les caractères que vous souhaitez supprimer, donc l'exclure de la suppression sera inclus par nature dans le résultat final.Le regex Javascript ordinaire ne gère pas les lettres Unicode .
Ne pas utiliser
[^\w\s]
, cela supprimera les lettres avec des accents (comme àèéìòù), sans parler du cyrillique ou du chinois, les lettres provenant de ces langues seront complétées supprimées.Vous ne voulez vraiment pas supprimer ces lettres avec tous les caractères spéciaux. Vous avez deux chances:
par exemple:
[^èéòàùì\w\s]
.\p{...}
syntaxe.la source
La première solution ne fonctionne pour aucun alphabet UTF-8. (Il coupera le texte tel que Їжак). J'ai réussi à créer une fonction qui n'utilise pas RegExp et utilise un bon support UTF-8 dans le moteur JavaScript. L'idée est simple si un symbole est égal en majuscule et en minuscule c'est un caractère spécial. La seule exception concerne les espaces blancs.
Mise à jour: veuillez noter que cette solution ne fonctionne que pour les langues comportant des minuscules et des majuscules. Dans des langues comme le chinois, cela ne fonctionnera pas.
Mise à jour 2: je suis arrivé à la solution d'origine lorsque je travaillais sur une recherche floue. Si vous essayez également de supprimer des caractères spéciaux pour implémenter la fonctionnalité de recherche, il existe une meilleure approche. Utilisez n'importe quelle bibliothèque de translittération qui vous produira une chaîne uniquement à partir de caractères latins, puis la simple expression régulière fera toute la magie pour supprimer les caractères spéciaux. (Cela fonctionnera également pour le chinois et vous bénéficierez également d'avantages secondaires en faisant
Tromsø
==Tromso
).la source
J'utilise RegexBuddy pour déboguer mes regex, il a presque toutes les langues très utiles. Que copier / coller pour la langue cible. Super outil et pas très cher.
J'ai donc copié / collé votre expression régulière et votre problème est que [,] sont des caractères spéciaux dans l'expression régulière, vous devez donc y échapper. Donc, l'expression régulière doit être: /!@#$^&%*()+=-[\x5B\x5D indirect\/{}|:<>?,./im
la source
pourquoi ne faites-vous pas quelque chose comme:
pour vérifier si votre entrée contient des caractères spéciaux
la source
èéòàùì
et dans certains cas, ce ne sera pas la solutionstr.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")
Je l'ai fait comme ça. Mais il y a des gens qui l'ont fait beaucoup plus facilement commestr.replace(/\W_/g,"");
la source
\W
contient certains des personnages. Mais pourquoi voudriez-vous filtrer les chiffres? Ce ne sont pas des caractères spéciaux.