2011/02/16

Проверка логина на корректность

Условие такое:

Логин должен начинаться с латинской буквы, может состоять из латинских букв, цифр, точки и минуса и должен заканчиваться латинской буквой или цифрой. Минимальная длина логина – 1 символ. Максимальная – 20
символов.

import re
from operator import truth

def logincheck(login):
    if login == '' or len(login) > 20:
        print 'False'
        return
    elif len(login) > 2:
        if (truth(re.match('[a-zA-Z]', login[0])) + \
            truth(re.match('[a-zA-Z0-9]', login[-1])) + \
            truth(re.match('^([a-zA-Z0-9\-\.])+$', login[1:-1]))) == 3:
            print 'True'
        else: print 'False'
        return
    elif len(login) == 2:
        if (truth(re.match('[a-zA-Z]', login[0])) + \
            truth(re.match('[a-zA-Z0-9]', login[-1]))) == 2:
            print 'True'
        else: print 'False'
        return
    else:
        if (truth(re.match('[a-zA-Z]', login[0]))) == 1:
            print 'True'
        else: print 'False'

Здесь проверка разбита на несколько этапов: для логина > 2 символов, для = 2 символам и для = 1 символу. Можно, конечно, сделать в 1 регулярное выражение, но мои копошения так и не смогли вывести такую регулярку. Если кто покажет - буду очень рад.

1 comment:

  1. может так ?
    if (s.length() < 1 || s.length() > 20) return false;
    return Pattern.compile("[a-z][a-z0-9.-]*[a-z0-9]", Pattern.CASE_INSENSITIVE)
    .matcher(s).matches();

    ReplyDelete