Seite 1 von 1
String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 13:38
von mrmiyagi
Hallo zusammen,
ich würde gerne eine Benutzereingabe auf Zeichen (die ich selbst bestimmt habe) überprüfen lassen.
In Javascript würde ich das ganze folgendermaßen umsetzen:
Code: Alles auswählen
for (i=0; i < value.length; i++)
if (value.charAt(i) == ä || value.charAt(i) == ö || value.charAt(i) == ü) print ("Ungültig!);
Wie bekomme ich nun in python die Länge eines Wertes herraus um eine ähnliche Schleife aufzubauen? len(value) ?
Wie könnte man das ganze am geschicktesten umsetzen? Gibt es auch hier die Möglichkeit die Zeichen Schritt für Schritt durchzuprüfen?
Vielen Dank vorab für hilfreichen Hinweise.
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 13:42
von EyDu
Hallo und willkommen im Forum!
Wenn du len verwendest um über etwas zu iterieren, dann machst du bei Python etwas falsch. du kannst auch direkt über Sequenzen gehen:
Wenn du doch mal einen Index brauchst, dann hilft dir die enumerate-Funktion. Alles das ist hier aber gar nicht notwendig, da du einfach ``in`` verwenden kannst:
oder über Mengen
Am besten erzählst du uns aber, was du genau vor hast. Es sieht nämlich so aus, als könnte dein Problem noch schöner gelöst werden.
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 13:43
von BlackJack
@mrmiyagi: Wie man die Länge einer Zeichenkette ermittelt, und auch dass Du das hierfür gar nicht brauchst, hätte Dir so ziemlich jedes Python-Tutorial verraten. Die Länge brauchst Du nicht weil man in Python direkt über die Elemente von Sequenztypen iterieren kann. Eine spezielle Zählschleifensyntax wie in JavaScript hat Python gar nicht erst.
Edit: Noch eine Variante:
Code: Alles auswählen
if any(c in u'äöü' for c in value):
print u'Ungültig!'
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 13:48
von mrmiyagi
Das ging ja fix!
Vielen Dank für eure Hinweise. Ich werde mal veruschen damit weiterzukommen!
Hintergrund:
Ich würde gerne eine Passworteingabe auf bestimmte Zeichen überprüfen lassen, um dieses für gültig oder ungültig erklären zu können.
In Javascript habe ich so etwas schon recht simple hinbekommen und nun geben ich mich an python mal ran.
Python ist, wie ich finde, eine schöne überschauliche Scriptsprache.
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 15:03
von snafu
Wie schon erwähnt: Nimm Sets (Mengen). Wenn von der Mengenleere noch ein bißchen was hängengeblieben ist (oder man Grundkenntnisse zu Bitoperationen hat und die zu übertragen weiß), dann sollte folgendes Konstrukt nach ein bißchen Nachdenken eigentlich verständlich sein:
Code: Alles auswählen
def is_valid_password(password, illegal_characters='äüö'):
return not set(password.lower()) & set(illegal_characters)
Mal als ganzes Programm:
Code: Alles auswählen
#/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
def is_valid_password(password, illegal_characters='äüö'):
return not set(password.lower()) & set(illegal_characters)
def main():
for pw in ('bla', 'blä', 'BLÄ'):
print(pw, 'ist', 'gültig' if is_valid_password(pw) else 'ungültig')
if __name__ == '__main__':
main()
Aus dem `&` musst du ein `&` machen. Der Code-Parser zickt bei dem Zeichen leider rum.
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 15:06
von BlackJack
Wobei ich mir gerade die Frage stelle warum man Zeichen in Passwörtern verbieten möchte. Überall wird einem gesagt, dass man Sonderzeichen verwenden soll, und dann kommt ein Skript daher und verbietet bestimmte Zeichen wieder.
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 15:26
von cofi
@BlackJack: So viel Entropie an einem Ort ist gefaehrlich

Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 16:37
von BlackJack
Nur mal so am Rande bezüglich der JavaScript-Umsetzung: Das `charAt()` braucht man nur für ältere Browser/JavaScript-Implementierungen. Moderne sollten die Indexsyntax kennen, also ``s
`` statt ``s.charAt(i)``. Und anstelle der langatmigen Oder-Verknüpfungen könnte man die `indexOf()`-Methode auf Zeichenketten verwenden:
Code: Alles auswählen
var FORBIDDEN_CHARACTERS = 'äöü';
var isValidPassword = function (password) {
for (var i = 0; i < password.length; i++) {
if (FORBIDDEN_CHARACTERS.indexOf(password[i]) >= 0) {
return false;
}
}
return true;
};
Mit Underscore.js wird die Funktion zu einem Einzeiler:
Code: Alles auswählen
var isValidPassword = function (password) {
return !_(password).some(_.partial(_.contains, FORBIDDEN_CHARACTERS));
};
Re: String auf Zeichen überprüfen
Verfasst: Freitag 2. August 2013, 18:41
von Sirius3
Durch die sehr schöne Integration regulärer Ausdrücke in Javascript ist das Problem sogar noch kürzer zu lösen:
Analog für Python:
Code: Alles auswählen
import re
def isInvalid(value):
return bool(re.search("[äöü]", value))
Re: String auf Zeichen überprüfen
Verfasst: Samstag 3. August 2013, 01:44
von Leonidas
Letzt könnte man noch Klammern in CoffeeScript weglassen:
