Найти - Пользователи
Полная версия: как проверить переменную "name" на запрещенные символы?
Начало » Python для новичков » как проверить переменную "name" на запрещенные символы?
1 2 3
xsay23
Здравствуйте.
Задача такова:
Если переменная name содержит что нибудь кроме “abcdefghijklmnopqrstuvwxyz1234567890.-”, то
возникала бы исключение которое можно было бы перехватить и вывести надпись:
print('Ошибка')

try:
    name = input('Введите слово: ')
excert вот тут что писать?:
    print('Ошибка')

Как это можно написать?
может есть другой способ, без прехвата исключений?
Budulianin
xsay23
Как это можно написать?
>>> if set(name).difference(s):
...     print('Ошибка')
...
Ошибка
xsay23
Budulianin
большое спасибо

решил так:
az09 = [az09 for az09 in 'abcdefghijklmnopqrstuvwxyz1234567890.-']
name = input('Слово: ')
#
if set(name).difference(az09):
    print('Ошибка')
FishHook
1. А если я капсом напишу?
2. Глянь на модуль string, там есть замечательные вещи, типа string.ascii_letters
AZJIO
С помощью регулярных выражений удалось сделать. Как вариант.
#!/usr/bin/python3
#coding: utf-8
import re
pattern = re.compile(r'[^A-Za-z0-9.-]') # Любой символ крому указанных диапазонов
# pattern = re.compile(r'[^\d]') # Кроме цифр, проба
name = input('Введите слово: ') # глючит на 2.7.8
# name =  raw_input('Введите слово: ') # глючит на 3.4
# name = '34буквы34' # Тест без ввода
# name = '34litter34' # Тест без ввода
# print(name)
var = pattern.search(name)
# print(var) # Если не найдено то None, если найдено, то объект
if var:
	print('Ошибка')
if not var:
	print('Успех')
4kpt_II
AZJIO
raw_input

P.S. Может хватит уже говнокод выкладывать?
xsay23
Мне важна компактность кода)
#
def mail():
    az09 = list('abcdefghijklmnopqrstuvwxyz1234567890.-@')
    mail = input('E-mail: ')#Ввод мыла
    mail = mail.lower()#перевод в прописные
    if set(mail).difference(az09):# :/ ТУТ думаю так лучше, или нет? 
        print('Ошибка, недопустимые символы')#
#
    len_mail = len(mail)# определение длины мыла в целом
    ch_dog = mail.find('@')# поиск @ и определение его индекса
    login = mail[:ch_dog]# определение логина
    len_login = len(login)# определение длины логин
#
    domen = mail[ch_dog+1:len_mail]# определение домена в целом
    len_domen = len(domen)# определение длины домена в целом
#
    t_domen = domen.find('.')# поиск точки в домене и присвоение его индекса
    domen_1 = domen[:t_domen]# определение основного домена
    domen_2 = domen[t_domen+1:len_domen]# домен за точкой
    len_domen_1 = len(domen_1)# определение длины основного домена
#
    domen_1_start = domen_1[0]# присвоение к переменной первого символа
    domen_1_finish = domen_1[len_domen_1-1]# присвоение к переменной последнего символа
    if domen_1_start == '-' or domen_1_finish == '-':
        print('Ошибка, домен начат/закончен дефисом')
#
    elif len_domen_1 < 3:#
        print('Ошибка, домен', domen_1 ,'менее 3-х символов')#
    elif len_domen_1 > 256:#
        print('Ошибка, домен более 256-ти символов')#
#
    elif len_login > 128:#
        print('Ошибка, слишком длинное имя')#
    elif len_login <= 0:#
        print('Ошибка, нет имени')#
#
    print()
mail()
AZJIO
Можно ещё добавить, чтобы два раза @ не было, и точка в домене была одна.
Alen
 
def mail():
    az09 = list('abcdefghijklmnopqrstuvwxyz1234567890.-@')
    mail = input('E-mail: ')#Ввод мыла
    mail = mail.lower()#перевод в прописные
    if set(mail).difference(az09):# :/ ТУТ думаю так лучше, или нет? 
        print('Ошибка, недопустимые символы')#

Что скажет на admin@домен.рф или vasya+pupkin@email.com ? А ведь это совершенно корректные почтовые адреса.
Alen
AZJIO
Можно ещё добавить, чтобы два раза @ не было, и точка в домене была одна.

Почему точка должна быть одна?! iam@from.company.com
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB