Любая функция python / django, чтобы проверить, содержит ли строка только символы, включенные в мою сортировку базы данных? - PullRequest
0 голосов
/ 27 февраля 2010

Как и ожидалось, я получаю сообщение об ошибке при вводе некоторых символов, не включенных в мою сортировку базы данных:

(1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='")

Есть ли какая-либо функция, которую я мог бы использовать, чтобы убедиться, что строка содержит только символы, существующие в моей сортировке базы данных?

спасибо

Ответы [ 2 ]

1 голос
/ 27 февраля 2010

Вы можете использовать регулярное выражение, чтобы разрешить только определенные символы. Следующее позволяет только буквы, цифры и _ (подчеркивание), но вы можете изменить, чтобы включить все, что вы хотите:

import re

exp = '^[A-Za-z0-9_]+$'
re.match(exp, my_string)

Если объект возвращается, совпадение найдено, если нет возвращаемого значения, недопустимая строка.

0 голосов
/ 02 марта 2010

Я бы посмотрел на функции Python unicode.translate () и codec.encode (). Оба из них позволили бы более элегантную обработку недопустимых символов ввода, и IIRC, translate (), как было показано, работает быстрее, чем регулярное выражение для аналогичных сценариев использования (должно быть легко найти результаты поиска в Google).

Из документов Python:

"Для объектов Unicode метод translate () не принимает необязательный аргумент deletechars. Вместо этого он возвращает копию s, в которой все символы были отображены через данную таблицу перевода, которая должна быть отображением ординалов Unicode в Порядковые числа Unicode, строки Unicode или None. Несопоставленные символы остаются нетронутыми. Символы, сопоставленные с None, удаляются. Обратите внимание, более гибкий подход заключается в создании настраиваемого кодека сопоставления символов с использованием модуля codecs (см., Например, encodings.cp1251). "

http://docs.python.org/library/stdtypes.html

http://docs.python.org/library/codecs.html

...