*** Addenda *** Il y a eu un problème avec l'article, veuillez donc lire la partie supplémentaire sous le texte.
Un jour J'écrivais une application Web sur Google App Engine (Python).
Il y a des moments où vous souhaitez déterminer les caractères qui peuvent être utilisés dans un mot de passe dans un service Web, n'est-ce pas?
Quand je l'ai recherché, j'ai entendu dire que je pouvais vérifier s'il s'agissait d'un caractère alphanumérique avec character string.isalnum ()
, alors je l'ai utilisé.
Mais c'est drôle.
password = 'abc123'
password.isalnum() #--> True
password = u'Ah'
password.isalnum() #-->Vrai hein?
Apparemment, les caractères pleine largeur sont jugés True par la méthode isalnum. Terrible...
Je n'ai pas d'autre choix que d'utiliser des expressions régulières. Au fait, j'ai préparé diverses choses.
import re
#Minuscule demi-largeur
lowerReg = re.compile(r'^[a-z]+$')
def islower(s):
return lowerReg.match(s) is not None
#Majuscule demi-largeur
upperReg = re.compile(r'^[A-Z]+$')
def isupper(s):
return upperReg.match(s) is not None
#Caractères alphabétiques
alphaReg = re.compile(r'^[a-zA-Z]+$')
def isalpha(s):
return alphaReg.match(s) is not None
#Numéro demi-largeur
digitReg = re.compile(r'^[0-9]+$')
def isdigit(s):
return digitReg.match(s) is not None
#Caractères alphanumériques demi-largeur
alnumReg = re.compile(r'^[a-zA-Z0-9]+$')
def isalnum(s):
return alnumReg.match(s) is not None
#Caractères alphanumériques demi-largeur ou trait de soulignement
alnum_Reg = re.compile(r'^[a-zA-Z0-9_]+$')
def isalnum_(s):
return alnum_Reg.match(s) is not None
#Symbole demi-largeur
symbolReg = re.compile(r'^[!-/:-@[-`{-~]+$')
def issymbol(s):
return symbolReg.match(s) is not None
#Caractères ASCII
asciiReg = re.compile(r'^[!-~]+$')
def isascii(s):
return asciiReg.match(s) is not None
isalnum('abc123') #--> True
isalnum(u'Ah') #--> False
r '^ [...] + $'
enr '^ [...] * $'
.J'ai senti qu'il y avait peu d'informations, alors prenez-en note.
...
Cela ne semble rien avoir à voir avec cela, mais Python3 n'est actuellement pas disponible sur Google App Engine (jusqu'à Python 2.7). Par conséquent, il existe deux types de chaînes de caractères, Unicode et str (pour être exact, des chaînes de caractères d'octets), ce qui n'est pas pratique ...
Je vous ai fait remarquer dans le commentaire.
Il semble que la méthode isalnum ne fonctionne pas pour les chaînes Unicode. L'encodage en UTF8 fonctionne comme prévu.
En plus de la méthode isalnum, vous pouvez utiliser isalpha (alphabet), isdigit (nombre), islower (inférieur) et isupper (supérieur).
Il n'y a pas de méthode pour les autres jugements (comme le jugement ASCII), utilisez donc l'expression régulière dans le texte.
La méthode isalnum fonctionne correctement pour les chaînes de caractères.
Toutefois, si vous gérez des caractères pleine largeur tels que le japonais dans la chaîne de caractères str, il est plus pratique d'utiliser la chaîne de caractères unicode car vous ne pouvez pas obtenir le nombre de caractères souhaité. Dans ce cas, convertissez-le en str et vérifiez.
u'Ah'.encode('utf-8').isalnum() #--> False
Dans la série Python 3.x, str et unicode sont intégrés, et bien qu'il soit nommé str, il s'agit en fait d'unicode. Par conséquent, même les chaînes littérales ordinaires doivent être codées en utf-8.
'Ah'.encode('utf-8').isalnum() #--> False
*** Ajouté ci-dessus ***