Validieren von strings

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
uphill
User
Beiträge: 22
Registriert: Sonntag 10. Dezember 2006, 20:17

Hi,
also ich will einen string validieren erlaubt sollen nur alphanumerische zeichen und der '_' sein, ich weiß das es die methode str.isalphanumeric gibt aber was mach ich dann mit dem underline, und ich dachte mir eventuell giebt es da eine gute möglichkeit das auf einem kurzem weg zu lösen ich hätte es mit:

Code: Alles auswählen

def isalpanumeric_(s):
	"""
	returns True if the string s only contains A-Z a-Z or _
	"""
	for c in s:
		c = ord(c)
		if c < 48 or c > 57  or \
		   c < 65 or c > 90  or \
		   c < 97 or c > 121 or \
		   c != 95:
			return False
	return True
thx
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Entweder:

Code: Alles auswählen

s.replace("_", "").isalnum()
oder z.B. mit REs:

Code: Alles auswählen

re.match("^[a-zA-Z_]*$", s)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi,

ich würde auch regular expressions vorziehen.
birkenfeld hat geschrieben:oder z.B. mit REs:

Code: Alles auswählen

re.match("^[a-zA-Z_]*$", s)
Allerdings waren alphanumerische Zeichen zu akzeptieren :wink: - und match checkt generell nur den Stringanfang.

Da es eine Abkürzung für alphanumerische Zeichen gibt, kann man das ganze noch etwas vereinfachen:

Code: Alles auswählen

re.match("[\w_]*$", s)
Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

oder mit set, siehe auch http://www.python-forum.de/topic-8370.html

Code: Alles auswählen

from string import letters

class Checker(object):
    def __init__(self):
        self.allow_chars = set(letters)

    def check(self, value):
        return set(value).issubset(self.allow_chars)


checker = Checker()

print checker.check("weuifgIUG")
print checker.check("nö")
print checker.check("123")

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ich finde es aber schon etwas lächerlich, dafür extra ne Klasse zu schreiben, wenns doch eine Funktion wunderbar tut. Python != Java.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Also als erstes muss da noch irgendwo XML rein... ;)
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

Code: Alles auswählen

print all(c.isalpha() or c == '_' for c in yourstring)

from string import letters
print all(c in letters for c in yourstring)
jetzt muss nur noch einer benchmarks machen :D
...meh...
Antworten