Je viens de commencer à apprendre mon premier vrai langage de programmation, Python. Je voudrais savoir comment contraindre la saisie utilisateur dans un raw_input
à certains caractères et à une certaine longueur. Par exemple, j'aimerais afficher un message d'erreur si l'utilisateur entre une chaîne qui contient autre chose que les lettres a-z
, et j'aimerais en afficher un si l'utilisateur entre plus de 15 caractères.
Le premier semble être quelque chose que je pourrais faire avec des expressions régulières, que je connais un peu parce que je les ai utilisées dans des choses Javascript, mais je ne sais pas comment les utiliser en Python. Le deuxième, je ne sais pas trop comment l'aborder. Quelqu'un peut-il aider?
Question 1: Restreindre à certains caractères
Vous avez raison, c'est facile à résoudre avec expressions régulières :
import re
input_str = raw_input("Please provide some info: ")
if not re.match("^[a-z]*$", input_str):
print "Error! Only letters a-z allowed!"
sys.exit()
Question 2: restreindre à une certaine longueur
Comme Tim l'a mentionné correctement, vous pouvez le faire en adaptant l'expression régulière dans le premier exemple pour n'autoriser qu'un certain nombre de lettres. Vous pouvez également vérifier manuellement la longueur comme ceci:
input_str = raw_input("Please provide some info: ")
if len(input_str) > 15:
print "Error! Only 15 characters allowed!"
sys.exit()
Ou les deux en un:
import re
input_str = raw_input("Please provide some info: ")
if not re.match("^[a-z]*$", input_str):
print "Error! Only letters a-z allowed!"
sys.exit()
Elif len(input_str) > 15:
print "Error! Only 15 characters allowed!"
sys.exit()
print "Your input was:", input_str
Les expressions régulières peuvent également limiter le nombre de caractères.
r = re.compile("^[a-z]{1,15}$")
vous donne une expression régulière qui ne correspond que si l'entrée est entièrement en minuscules ASCII lettres et 1 à 15 caractères de long.
if any( [ i>'z' or i<'a' for i in raw_input]):
print "Error: Contains illegal characters"
Elif len(raw_input)>15:
print "Very long string"