Regex, tous les caractères non alphanumériques sauf les espaces blancs ou deux-points

131

Comment puis-je faire celui-ci n'importe où?

Fondamentalement, j'essaie de faire correspondre toutes sortes de caractères divers tels que les esperluettes, les points-virgules, les signes dollar, etc.

Ryan Ward
la source
13
/[^a-zA-Z0-9\s\:]*/
Kelly

Réponses:

246
[^a-zA-Z\d\s:]
  • \ d - classe numérique
  • \ s - espace blanc
  • a-zA-Z - correspond à toutes les lettres
  • ^ - les annule tous - donc vous obtenez - des caractères non numériques, non espaces et non deux-points
Tudor Constantin
la source
C'est ce que je regardais aussi :)) - Je dois promouvoir votre réponse parfaite
Tudor Constantin
7
La seule chose que j'ai trouvée est que cela supprime les caractères spéciaux comme é ou ã. Je préférerais [^ \ w \ d \ s:].
Eric Belair
5
Évalué car cela n'attrapera pas les caractères non latins, ni les caractères latins "spéciaux".
damian
\det \ssont des extensions Perl qui sont généralement pas pris en charge par les anciens outils comme grep, sed, tr, lex, etc.
tripleee
38

Cela devrait le faire:

[^a-zA-Z\d\s:]
Luke Sneeringer
la source
1
Les autres vérifient l'espace mais pas les espaces blancs ou ont la négation au mauvais endroit pour annuler réellement.
Zachary Scott
\ w attrape également les traits de soulignement - qui est un caractère non alphanumérique
Tudor Constantin
Ah! Je vais modifier - je ne le savais pas. Je pense que cela fonctionne différemment pour différents moteurs, mais pourrait tout aussi bien donner à l'OP une réponse sûre.
Luke Sneeringer
2
Évalué car cela n'attrapera pas les caractères non latins, ni les caractères latins "spéciaux".
damian
16

Si vous voulez traiter les caractères latins accentués (par exemple à Ñ) comme des lettres normales (c'est-à-dire éviter de les faire correspondre également), vous devrez également inclure la plage Unicode appropriée ( \ u00C0- \ u00FF ) dans votre expression régulière , donc il ressemblerait à ceci:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ annule ce qui suit
  • a-zA-Z correspond aux lettres majuscules et minuscules
  • \d correspond aux chiffres
  • \s correspond à un espace blanc (si vous souhaitez uniquement faire correspondre des espaces, remplacez-le par un espace)
  • : correspond à un deux-points
  • \u00C0-\u00FF correspond à la plage Unicode pour les caractères latins accentués.

nb. La correspondance de plage Unicode peut ne pas fonctionner pour tous les moteurs regex, mais ce qui précède fonctionne certainement en Javascript (comme le montre ce stylo sur Codepen).

nb2. Si vous ne vous souciez pas de faire correspondre les traits de soulignement, vous pouvez remplacer a-zA-Z\dpar \w, qui correspond aux lettres, aux chiffres et aux traits de soulignement.

Nick F
la source
Cette plage contient certains caractères qui ne sont pas alphanumériques (U + 00D7 et U + 00F7), et exclut de nombreux caractères accentués valides de langues non occidentales comme le polonais, le tchèque, le vietnamien, etc.
tripleee
1
J'ai voté pour la description de chaque partie du RegEx.
morajabi
14

Essaye ça:

[^a-zA-Z0-9 :]

Exemple JavaScript:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Voir un exemple en ligne:

http://jsfiddle.net/vhMy8/

Topera
la source
3
Évalué car cela n'attrapera pas les caractères non latins, ni les caractères latins "spéciaux".
damian
14
Il est facile de voter contre une réponse, et encore plus difficile de fournir des informations constructives au tableau, par exemple comment peut-on alors attraper les caractères non latins, ni les caractères latins «spéciaux»? D'après mon décompte, vous avez voté à la baisse pour 3 réponses pour la même raison, et à mon avis pour une modification plutôt mineure. Par exemple, je suis ici pour trouver une regex pour exactement ce qui est discuté dans ces réponses. Je me fiche des jeux de caractères qui ne seront pas utilisés dans mon application. Loi des rendements décroissants.
Aaron est peut-être une "modification mineure" pour un citoyen américain, mais très pertinent pour ... le reste de cette planète.
Michael K. Borregaard
4

Aucun espace alphanumérique, blanc ou «_».

var reg = /[^\w\s)]|[_]/g;
Vasyl Gutnyk
la source
4

Si vous voulez dire "caractères non alphanumériques", essayez d'utiliser ceci:

var reg =/[^a-zA-Z0-9]/g      //[^abc]
Kim-Trinh
la source
1

Cette expression régulière fonctionne pour C # , PCRE et Go pour n'en nommer que quelques-uns.

Cela ne fonctionne pas pour JavaScript sur Chrome d'après ce que dit RegexBuddy . Mais il y a déjà un exemple pour cela ici.

Cette partie principale de ceci est:

\p{L}

qui représente \p{L}ou \p{Letter}tout type de lettre de n'importe quelle langue. »


Le regex complet lui-même: [^\w\d\s:\p{L}]

Exemple: https://regex101.com/r/K59PrA/2

Ste
la source
C'est la seule réponse ici qui traite correctement l'alphabet accentué Unicode de manière appropriée. Malheureusement, tous les moteurs de regex ne prennent pas en charge cette fonctionnalité (même Python en manque, à partir de la version 3.8, même si son moteur de regex est apparemment basé sur PCRE).
tripleee
1
Je vais supprimer Python de la réponse, je pensais avoir testé cela mais apparemment pas. Merci d'avoir fait remarquer cela.
Ste
0

Essayez d'ajouter ceci:

^[^a-zA-Z\d\s:]*$

Cela a fonctionné pour moi ... :)

Er Parthu
la source
Cela semble répéter la réponse acceptée de 2011. Les ancres ^et la $confinent pour correspondre à des lignes entières et le *quantificateur signifie qu'il correspond également aux lignes vides.
tripleee
0

En JavaScript:

/[^\w_]/g

^négation, c'est-à-dire sélectionner tout ce qui n'est pas dans l'ensemble suivant

\w tout caractère de mot (c'est-à-dire tout caractère alphanumérique, plus le trait de soulignement)

_ annule le trait de soulignement, car il est considéré comme un caractère «mot»

Exemple d'utilisation - const nonAlphaNumericChars = /[^\w_]/g;

Chris Halcrow
la source