Comment faire pour supprimer les caractères non-alphanumériques?
J'ai besoin de supprimer tous les caractères d'une chaîne de caractères qui ne sont pas dans a-z A-Z 0-9
définir ou ne sont pas des espaces.
Quelqu'un aurait-il une fonction pour faire cela?
Vous devez vous connecter pour publier un commentaire.
Sonne comme vous avez presque savais ce que tu voulais faire déjà, en gros, vous avez défini comme une regex.
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
De caractères unicode, il est :
\w
comprend\d
et donc la\d
est inutile. Aussi, c'est faux, car il permettra également de laisser les traits de soulignement dans la chaîne résultante (qui est également inclus dans\w
).i
drapeau vraiment nécessaire ici depuis[:alnum:]
couvre déjà les deux cas?Expression régulière est votre réponse.
i
est synonyme de casse.^
moyens, ne commence pas avec.\d
correspond à un chiffre.a-z
correspond à tous les caractères entrea
etz
. En raison de lai
paramètre que vous n'avez pas à spécifiera-z
etA-Z
.\d
il y a un espace, de sorte que les espaces sont autorisés dans cette regex.voici une très simple regex pour que:
et utilisé comme vous le souhaitez (avec un avant
/
slash délimiteur).Tester ici avec cet outil génial qui explique ce que la regex est en train de faire:
http://www.regexr.com/
/u
drapeau contraire des caractères non-ascii sont également supprimés.[\W_]+
De sélectionner tous les pas de A-Z, a-z, 0-9 et de le supprimer.
Voir exemple ici: https://regexr.com/3h1rj
\W
est l'inverse de\w
qui sont des personnagesA-Za-z0-9_
. Donc\W
correspond à tout caractère qui n'est pasA-Za-z0-9_
et les supprimer. Le[]
est un jeu de caractères limite. Le+
est redondante sur un jeu de caractères limite, mais normalement 1 ou plus de caractère. Leu
drapeau développe l'expression d'inclure des caractères unicode à l'appui, le sens qu'il ne va pas supprimer des caractères au-delà de code de caractère 255 commeª²³µ
. Exemple de différents usages 3v4l.org/hSVV5 avec unicode et des caractères ascii.Si vous avez besoin de l'appui d'autres langues, au lieu de A-Z, vous pouvez utiliser les éléments suivants:
[^\p{L}\p{N} ]
définit un niée (Elle correspond à un caractère qui est pas défini) la classe de caractères:\p{L}
: une lettre de tout langue.\p{N}
: un caractère numérique dans tout script.: un caractère d'espace.
+
goulûment correspond à la classe de personnage entre 1 et illimité fois.Ce sera de préserver les lettres et les chiffres à partir d'autres langues et d'écritures ainsi que A-Z:
Remarque: C'est une très vieille mais pertinente question. Je réponds uniquement à fournir des renseignements supplémentaires qui peuvent être utiles pour les futurs visiteurs.
Vous pouvez le tester ici : http://regexr.com/
Je cherchais la réponse trop et mon intention était de nettoyer tous les non-alpha et il ne devrait pas avoir plus d'un espace.
Donc, j'ai modifié Alex en réponse à cela, et c'est de travailler pour moi
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
L'expression régulière ci-dessus tourné
sy8ed sirajul7_islam
àsy ed sirajul islam
Explication: la regex va vérifier PAS TOUT de a à z dans le cas insensible façon ou plusieurs espaces blancs, et il sera converti en un espace unique.
j'utilise ceci:
[^\x00-\xAD]
où 0xAD est le point de code pour SOFT TIRET. Même si vous faites ce droit,[^\x00-\xFF]
est complètement absurde et faux.