*** Nachtrag *** Mit dem Artikel stimmte etwas nicht. Lesen Sie daher bitte den zusätzlichen Teil unter dem Text.
Eines Tages Ich habe eine Web-App in Google App Engine (Python) geschrieben.
Es gibt Zeiten, in denen Sie die Zeichen bestimmen möchten, die in einem Kennwort in einem Webdienst verwendet werden können, oder?
Als ich es nachgeschlagen habe, habe ich gehört, dass ich überprüfen kann, ob es sich um ein alphanumerisches Zeichen mit "Zeichenfolge.isalnum ()" handelt, also habe ich das verwendet.
Aber es ist lustig.
password = 'abc123'
password.isalnum() #--> True
password = u'Ah'
password.isalnum() #-->Stimmt wie?
Anscheinend werden Zeichen voller Breite nach der isalnum-Methode als wahr beurteilt. Furchtbar...
Ich habe keine andere Wahl, als reguläre Ausdrücke zu verwenden. Ich habe übrigens verschiedene Dinge vorbereitet.
import re
#Kleinbuchstaben in halber Breite
lowerReg = re.compile(r'^[a-z]+$')
def islower(s):
return lowerReg.match(s) is not None
#Halbbreites Kapital
upperReg = re.compile(r'^[A-Z]+$')
def isupper(s):
return upperReg.match(s) is not None
#Alphabetische Zeichen
alphaReg = re.compile(r'^[a-zA-Z]+$')
def isalpha(s):
return alphaReg.match(s) is not None
#Nummer halber Breite
digitReg = re.compile(r'^[0-9]+$')
def isdigit(s):
return digitReg.match(s) is not None
#Alphanumerische Zeichen halber Breite
alnumReg = re.compile(r'^[a-zA-Z0-9]+$')
def isalnum(s):
return alnumReg.match(s) is not None
#Alphanumerische Zeichen halber Breite oder Unterstrich
alnum_Reg = re.compile(r'^[a-zA-Z0-9_]+$')
def isalnum_(s):
return alnum_Reg.match(s) is not None
#Symbol halber Breite
symbolReg = re.compile(r'^[!-/:-@[-`{-~]+$')
def issymbol(s):
return symbolReg.match(s) is not None
#ASCII-Zeichen
asciiReg = re.compile(r'^[!-~]+$')
def isascii(s):
return asciiReg.match(s) is not None
isalnum('abc123') #--> True
isalnum(u'Ah') #--> False
r '^ [...] + $'
inr '^ [...] * $'
.Ich hatte das Gefühl, dass es wenig Informationen gab, also notieren Sie es sich.
...
Es scheint nichts damit zu tun zu haben, aber Python3 ist derzeit nicht in Google App Engine verfügbar (bis Python 2.7). Daher gibt es zwei Arten von Zeichenfolgen, Unicode und str (um genau zu sein, Byte-Zeichenfolgen), was unpraktisch ist ...
Ich habe Sie im Kommentar darauf hinweisen lassen.
Es scheint, dass die isalnum-Methode für Unicode-Zeichenfolgen nicht funktioniert. Die Codierung in UTF8 funktioniert wie erwartet.
Zusätzlich zur Isalnum-Methode können Sie Isalpha (Alphabet), Isdigit (Zahl), Islower (unten) und Isupper (oben) verwenden.
Es gibt keine Methode für andere Urteile (z. B. ASCII-Urteile). Verwenden Sie daher den regulären Ausdruck im Text.
Die isalnum-Methode funktioniert korrekt für str-Strings.
Wenn Sie jedoch Zeichen in voller Breite wie Japanisch in der Zeichenfolge str verarbeiten, ist es bequemer, die Unicode-Zeichenfolge zu verwenden, da Sie nicht die gewünschte Anzahl von Zeichen abrufen können. In diesem Fall konvertieren Sie es in str und überprüfen.
u'Ah'.encode('utf-8').isalnum() #--> False
In der Python 3.x-Serie sind str und unicode integriert, und obwohl es str heißt, handelt es sich tatsächlich um Unicode. Daher müssen auch gewöhnliche String-Literale in utf-8 codiert werden.
'Ah'.encode('utf-8').isalnum() #--> False
*** Oben hinzugefügt ***
Recommended Posts