РЕДАКТИРОВАТЬ : уточнение разрешенного набора символов на основе комментариев
Допустимые символы из набора символов ASCII: a-z
, A-Z
, 0-9
, -
, _
, .
, /
. Любой другой символ из набора ASCII не должен быть разрешен.
Также допускаются символы Unicode, кроме запрещенного набора ASCII, определенного выше.
Конец редактирования
Я обрабатываю некоторые текстовые данные, где единственными допустимыми символами ASCII являются a-z
, A-Z
, 0-9
и -
, _
, .
, /
. Помимо этих символов Unicode также допускается. Мне нужно убедиться, что входящие данные содержат только этот набор символов.
Проверка допустимых символов ASCII проста:
from string import ascii_letters, digits
VALID_CHARSET= set(ascii_letters + digits + "-_./")
def is_valid_string(string):
for c in string:
if c not in VALID_CHARSET:
return False
return True
Но мне интересно, как можно разрешить символы юникода помимо вышеперечисленного. Я думаю, в Python-2.7 я мог бы добавить проверку следующим образом:
if isinstance(c, unicode)
return True
if c not in VALID_CHARSET:
return False
Но строки в Python-3 по умолчанию являются Unicode, и отдельного типа unicode
не существует, поэтому это не сработает. Любой более чистый способ сделать это, который работает в обеих версиях Python?