Bonsoir,
Ci-joint une proposition pour tenter de répondre au problème posé.
Je propose de faire 3 contrôles:
[list]
Un contrôle de longueur de chaines
Un contrôle de validité des caractères
Un contrôle de format
/list
# -*- coding: ISO-8859-15 -*-
import sys
#"XXXXXXXXXX" Longueur = 10
#"XX:XX:XX:XX:XX" Longueur = 14
#"XXXXXXXXXXXXXXXXXXXXXXXXXX" Longueur = 26
#"XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX" Longueur = 38
#La liste contient les caractères autorisées
lst_ref_car = [":","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]
#La liste contient les longueurs de chaines autorisées
lst_ref_long = [10,14,26,38]
#chaine = "ABCDEF01x:"
#chaine = "AB:CD:EF:12::3"
#chaine = "AB:CD:EF:12:32"
chaine = "AB:CD:EF:01:23:45:67:89:AA:BB:CC:DD:EE"
#1-Contrôle de la longueur des chaines
long = len(chaine)
if long in lst_ref_long:
print "OK : Longueur correcte ", chaine, " a une longueur de :", long
else:
print "ERROR : Longueur incorrecte ", chaine, " a une longueur de :", long
sys.exit()
#2-Contrôle de la validité des caractères
for car in chaine:
if car not in lst_ref_car:
print "ERROR : dans la chaine ",chaine, " le caractere >" ,car ,"< n'est pas autorisé"
sys.exit()
print "OK : La chaine " ,chaine ," contient des caractères autorisés"
#3-Contrôle des formats
#Les chaines de longueur 10 ou 26 ne doivent pas contenir le caractère ":"
if long 10 or long 26:
if chaine.find(":") >= 0:
print "ERROR : dans la chaine ",chaine, " le caractere > : < n'est pas autorisé"
else:
print "OK : Format de >", chaine, " est correct"
#Les chaines de longueur 14 ou 28 doivent contenir ":" tous les deux caractères (XX:)
if long 14 or long 38:
#La méthode SPLIT renvoie une LIST découpée sur l'argument ":"
# chaque élément de la liste doit avoir une longuer de 2 caractères
lst_test = chaine.split(":")
for element in lst_test:
if len(element) != 2:
print "ERROR : Format incorrect dans la chaine ",chaine, " le caractere > : < est mal positionné"
sys.exit()
print "OK : Le format de la chaine ", chaine, " est correct"
Je n'ai pas testé tous les cas de figure.
En espérant avoir répondu à la question.