1
votes

Regex simple pour faire correspondre certains caractères et en exclure d'autres

J'ai besoin d'une expression régulière pour que preg_match accepte tous les caractères alphanumériques sauf l , L , v , V , 0 , 2 .

J'ai essayé

^[a-zA-Z0-9][^lLvV02]*$

Cela fonctionne bien en excluant lLvV02 mais il accepte aussi d'autres caractères comme ESPACE, ù, @, #, etc ...

Comment dois-je le changer?


1 commentaires

Utilisez ^ (?: (?! [LLvV02]) [a-zA-Z0-9]) * $


3 Réponses :


0
votes

Vous pouvez utiliser

^(?:(?![lLvV02])[a-zA-Z0-9])*$

Détails

  • ^ - début de chaîne
  • (?: - début d'un groupe sans capture
    • (?! [lLvV02]) [a-zA-Z0-9] - un caractère d'alnum qui n'est pas l'un des caractères de la classe de caractères résidant dans une anticipation négative
  • ) * - fin du groupe non capturant, 0 ou plusieurs répétitions
  • $ - fin de chaîne

Voir le Graphique Regulex :

 entrez la description de l'image ici

p>


0 commentaires

0
votes

Je sais que vous avez demandé un Regex, mais vous pouvez d'abord tester l'alphanumérique et seulement si cela réussit vérifier que les autres ne sont PAS présents:

if(ctype_alnum($string) && !preg_match('/[lLvV02]/', $string)) {
    //pass
} else {
    //fail
}

Ou éventuellement remplacer preg_match ( '/ ^ [^ lLvV02] + $ /', $ string) .


1 commentaires

Pas ce que je cherchais, mais sympa quand même.



0
votes

Le plus simple serait probablement: ^ [a-km-uw-zA-KM-UW-Z13-9] * $ . Je ne dis pas que c'est joli mais ça fait ce qu'il est censé faire.


0 commentaires