sergeek
Так не получится же.
поправил обратно пока
#!/usr/bin/env python3
import re
def is_login(s):
y, n, quo, pt = True, 0, False, False
for c in s:
if not y or n == 128 or (c in '!,:' and not quo) or \
(c == '.' and pt) or not re.search(r'^[a-z0-9"._!,:-]$', c):
y = False
break
n += 1
if c == '"':
quo = not quo
pt = False
else:
pt = c == '.'
y = s != '' and y and not quo
return y
if __name__ == '__main__':
for s in [
'',
'abc',
'a' * 128,
'a' * 129,
'abc..def',
'abc"."def',
'"abc!,:def"',
'abc!,:def',
'"abc!,:def""',
'""',
'""#'
]:
print('<{}>: {}'.format(s, is_login(s)))
[guest@localhost login_ind]$ ./login_ind.py
<>: False
<abc>: True
<aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>: True
<aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>: False
<abc..def>: False
<abc"."def>: True
<"abc!,:def">: True
<abc!,:def>: False
<"abc!,:def"">: False
<"">: True
<""#>: False
[guest@localhost login_ind]$
через
re sergeek'а без ограничителя быстрее в 10 раз (проверки шаблонов на C сделаны)