2010-05-18 5 views
2

Comment supprimer tous les caractères d'une chaîne qui ne contient PAS: [a-zA-Z0-9\-\/_]? En d'autres termes, je voudrais préciser ce que je veux plutôt que ce que je ne veux pas. Merci.PHP RegEx spécifie les caractères que je veux?

+0

Juste une note: Votre regex est apparu à l'origine sans la barre oblique inverse devant le tiret, car vous n'avez pas utilisé de backticks pour le formater. Les répondeurs l'ont tous copié de cette façon - et cela fonctionne - mais vous devriez continuer à vous en échapper de toute façon. Toutes les saveurs de regex ne sont pas aussi indulgentes que PHP. –

Répondre

5

manière la plus simple:

preg_replace("/[^a-zA-Z0-9-\/_]/", '', $string); 

Une autre approche serait de faire un match et imploser alors les valeurs correspondantes.

+0

Est-ce que cela éliminerait a-z, A-Z, 0-9, -, et et _? Je ne veux pas ça. Je veux garder ceux sans créer une ligne de 10kb de choses que je ne veux pas. –

+0

Exactement, le petit '^' chapeau signifie * tout le reste sauf le truc ici. –

+1

WOW! Je l'ai pris comme un symbole de début de chaîne. Toutes ces années et je n'avais aucune idée. Merci beaucoup. –

1

essayer les suivantes

preg_replace("/[^a-zA-Z0-9-\/_]/", "", $string); 
0

Si vous voulez garder un "/" et "\"

preg_replace("/[^a-zA-Z0-9-\\\/_]/", '', $string); 
+0

Je suis sûr que la barre oblique inverse était seulement là pour échapper à l'avant-coup; Maintenant que j'ai ajouté le formatage du code à la question, vous pouvez voir qu'il y en a un devant le trait d'union. –

+0

Oui, je peux le voir maintenant, merci –

0

Shortest façon de le faire:

echo(preg_replace('~[^\w-/]~i', '', 'H#el/-l0:0.')); 

Sorties:

"Hel/-l00" 
Questions connexes