Seite 1 von 1

Validieren von strings

Verfasst: Freitag 15. Dezember 2006, 19:37
von uphill
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

Verfasst: Freitag 15. Dezember 2006, 19:45
von birkenfeld
Entweder:

Code: Alles auswählen

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

Code: Alles auswählen

re.match("^[a-zA-Z_]*$", s)

Verfasst: Dienstag 19. Dezember 2006, 09:50
von Michael Schneider
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

Verfasst: Dienstag 19. Dezember 2006, 10:43
von jens
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")

Verfasst: Dienstag 19. Dezember 2006, 14:07
von birkenfeld
Ich finde es aber schon etwas lächerlich, dafür extra ne Klasse zu schreiben, wenns doch eine Funktion wunderbar tut. Python != Java.

Verfasst: Mittwoch 20. Dezember 2006, 17:41
von Y0Gi
Also als erstes muss da noch irgendwo XML rein... ;)

Verfasst: Montag 25. Dezember 2006, 05:19
von cracki

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