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?
3 Réponses :
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 :
p>
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)
.
Pas ce que je cherchais, mais sympa quand même.
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.
Utilisez
^ (?: (?! [LLvV02]) [a-zA-Z0-9]) * $